데이터베이스 키의 종류와 특성 완벽 가이드

데이터베이스에서 사용되는 다양한 키의 종류와 그 특성인 유일성과 최소성에 대한 개념을 체계적으로 설명하는 가이드다.

image-20250418210234735

종류 : 슈퍼키, 후보키, 기본키, 대체키, 외래키, 유니크키

각 행을 구분만 할 수 있다면(=유일성) ‘슈퍼키’

각 행을 구분(=유일성) + 최소성이면 ‘후보키’

후보키에서 하나를 메인으로 선택하면 ‘기본키’

기본키를 제외한 나머지 후보키들은 ‘대체키’ → MySQL의 UNIQUE

한 테이블이 다른 테이블의 기본키를 참조하면 ‘외래키’

기본키 속성에 Null값을 허용하면 ‘유니크키’

공식 : Pk=Uk + ~Null



데이터베이스 키의 개념과 중요성

데이터베이스에서 키(Key)는 테이블의 레코드를 식별하고 테이블 간의 관계를 정의하는 중요한 요소다. 키는 데이터의 무결성을 유지하고 효율적인 데이터 검색을 가능하게 한다.



키의 특성: 유일성과 최소성

키를 이해하기 위해서는 두 가지 핵심 특성을 알아야 한다.


유일성(Uniqueness)

  • 하나의 키값으로 테이블 내의 튜플(행)을 유일하게 식별할 수 있는 성질
  • 동일한 키 값을 가진 두 개 이상의 레코드가 존재할 수 없음
  • 예: 학생 테이블에서 ‘학번’은 각 학생을 유일하게 식별
-- 유일성을 가진 학번 컬럼 예시
CREATE TABLE Students (
    StudentID VARCHAR(10) PRIMARY KEY,
    Name VARCHAR(100),
    Department VARCHAR(50)
);


최소성(Minimality)

  • 키를 구성하는 속성(컬럼)들이 최소한으로 구성되어야 한다는 성질
  • 불필요한 속성을 제거해도 유일성이 유지되어야 함
  • 예: ‘학번’만으로 학생을 식별할 수 있다면, ‘학번+주민등록번호’ 조합은 최소성을 만족하지 않음

유일성과 최소성은 키의 정의에 있어 핵심적인 개념으로, 이 두 특성의 조합에 따라 다양한 종류의 키가 정의된다.



데이터베이스 키의 종류

데이터베이스에서는 다양한 종류의 키가 존재하며, 각각 고유한 특성과 용도를 가지고 있다.



슈퍼키(Super Key)

슈퍼키는 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다.

  • 특징: 유일성은 만족하지만, 최소성은 만족하지 않을 수 있음
  • 예시: 학생 테이블에서 ‘학번’, ‘주민등록번호’, ‘학번+이름’, ‘주민등록번호+학과’ 등
슈퍼키 예시:
- 학번
- 주민등록번호
- (학번, 이름)
- (주민등록번호, 학과)

💡 슈퍼키는 유일성만 만족하면 되므로, 불필요한 속성이 포함될 수 있다.



후보키(Candidate Key)

후보키는 슈퍼키 중에서 최소성을 만족하는 키다.

  • 특징: 유일성과 최소성을 모두 만족
  • 예시: 학생 테이블에서 ‘학번’, ‘주민등록번호’
후보키 예시:
- 학번 (단일 속성으로 유일성 만족)
- 주민등록번호 (단일 속성으로 유일성 만족)
- (이름, 생년월일) (두 속성의 조합이 필요하며, 어느 하나라도 제외하면 유일성 상실)

후보키는 테이블에서 기본키로 선택될 수 있는 후보들이다.



기본키(Primary Key)

기본키는 여러 후보키 중에서 테이블의 대표키로 선택된 키다.

  • 특징: 유일성과 최소성을 만족하며, NULL 값을 가질 수 없음
  • 예시: 학생 테이블에서 ‘학번’을 기본키로 선택
-- 기본키 설정 예시
CREATE TABLE Students (
    StudentID VARCHAR(10) PRIMARY KEY,
    SSN VARCHAR(13) UNIQUE,
    Name VARCHAR(100),
    BirthDate DATE
);

기본키는 테이블 내에서 각 레코드를 고유하게 식별하는 핵심 요소로, 데이터 무결성 유지에 중요한 역할을 한다.



대체키(Alternate Key)

대체키는 기본키로 선택되지 않은 후보키들을 의미한다.

  • 특징: 유일성과 최소성을 만족하지만 기본키로 선택되지 않음
  • 예시: 학생 테이블에서 ‘학번’이 기본키라면, ‘주민등록번호’는 대체키
-- 대체키(UNIQUE 제약조건) 설정 예시
CREATE TABLE Students (
    StudentID VARCHAR(10) PRIMARY KEY,
    SSN VARCHAR(13) UNIQUE,  -- 대체키
    Email VARCHAR(100) UNIQUE,  -- 대체키
    Name VARCHAR(100)
);

💡 MySQL에서는 UNIQUE 제약조건을 사용하여 대체키를 구현한다.



외래키(Foreign Key)

외래키는 한 테이블의 필드(또는 필드 집합)가 다른 테이블의 기본키를 참조할 때 사용된다.

  • 특징: 테이블 간의 관계를 정의하고 참조 무결성을 유지
  • 예시: 수강 테이블의 ‘학번’이 학생 테이블의 ‘학번’(기본키)을 참조
-- 외래키 설정 예시
CREATE TABLE Enrollments (
    EnrollmentID INT PRIMARY KEY,
    StudentID VARCHAR(10),
    CourseID VARCHAR(10),
    EnrollDate DATE,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);

외래키는 테이블 간의 관계를 정의하고 데이터의 일관성을 유지하는 데 중요한 역할을 한다.



유니크키(Unique Key)

유니크키는 기본키와 유사하지만 NULL 값을 허용한다는 점에서 차이가 있다.

  • 특징: 유일성은 만족하지만 NULL 값을 허용
  • 예시: 학생 테이블에서 ‘이메일’ 컬럼(NULL 허용하지만 값이 있으면 유일해야 함)
-- 유니크키 설정 예시
CREATE TABLE Students (
    StudentID VARCHAR(10) PRIMARY KEY,
    Email VARCHAR(100) UNIQUE,  -- 유니크키 (NULL 허용)
    Name VARCHAR(100)
);

💡 공식: PK = UK + ~NULL (기본키는 유니크키에 NOT NULL 제약조건을 추가한 것)



키 선택의 실제 예시

실제 데이터베이스 설계에서 키를 선택하는 과정을 예시를 통해 살펴보자.

학생 테이블에서 다양한 키의 적용:

학생 테이블 속성:
- 학번
- 이름
- 주민등록번호
- 학과
- 입학년도
- 이메일
  1. 슈퍼키:
    • 학번
    • 주민등록번호
    • (학번, 이름)
    • (주민등록번호, 학과)
    • (이름, 주민등록번호)
  2. 후보키:
    • 학번 (단일 속성으로 유일성 만족)
    • 주민등록번호 (단일 속성으로 유일성 만족)
    • 이메일 (단일 속성으로 유일성 만족, NULL 허용 시)
  3. 기본키:
    • 학번 (후보키 중에서 선택)
  4. 대체키:
    • 주민등록번호 (후보키지만 기본키로 선택되지 않음)
    • 이메일 (후보키지만 기본키로 선택되지 않음)
  5. 외래키:
    • 수강 테이블에서 학번을 참조하는 경우

예시에서 “학번”으로 충분히 구분이 되는데 “학번,주민등록번호” 조합은 최소성을 만족하지 않아 후보키가 될 수 없다. 또한 “이름,생년월일” 조합이 슈퍼키라고 해도 이미 “학번”으로 충분히 구분할 수 있으므로 이 또한 후보키에서 제외된다.



키 설계 시 고려사항

데이터베이스 설계 시 키를 선택할 때 고려해야 할 사항들:

  1. 안정성: 값이 자주 변경되지 않는 속성을 키로 선택
  2. 단순성: 가능한 단순한 구조의 키를 선택
  3. 널(NULL) 값: 기본키는 NULL 값을 허용하지 않아야 함
  4. 미래 확장성: 미래에 변경될 가능성이 낮은 속성을 선택
  5. 인덱싱 효율: 검색 성능을 고려한 키 선택
-- 좋은 기본키 설계 예시
CREATE TABLE Products (
    ProductID INT AUTO_INCREMENT PRIMARY KEY,  -- 자동 증가하는 숫자형 ID
    ProductName VARCHAR(100) NOT NULL,
    Price DECIMAL(10, 2)
);

데이터베이스 키는 데이터의 무결성을 유지하고 효율적인 데이터 접근을 가능하게 하는 핵심 요소다. 각 키의 특성과 용도를 이해하고 적절히 설계함으로써 안정적이고 효율적인 데이터베이스 시스템을 구축할 수 있다.

댓글남기기