"기본키랑 유니크키는 둘 다 중복을 막는데 뭐가 다르죠?" 테이블을 설계하다 보면 이 세 가지 키가 비슷해 보여 헷갈립니다. 핵심은 단순합니다. 기본키는 이 행을 대표하는 단 하나의 식별자, 유니크키는 다른 칼럼의 중복을 막는 보조 규칙, 외래키는 다른 테이블과의 연결고리입니다. 회원 테이블 하나로 셋을 전부 설명할 수 있습니다.
세 가지 키 한눈에
| 키 | 역할 | 중복 | NULL | 개수 |
|---|---|---|---|---|
| 기본키(PK) | 행의 대표 식별자 | 불가 | 불가 | 테이블당 1개 |
| 유니크키(UK) | 특정 칼럼 값 중복 방지 | 불가 | 보통 허용 | 여러 개 가능 |
| 외래키(FK) | 다른 테이블 참조 | 가능 | 가능 | 여러 개 가능 |
기본키와 유니크키의 가장 큰 차이는 두 가지입니다. 기본키는 NULL을 절대 허용하지 않고 테이블에 단 하나뿐이지만, 유니크키는 보통 NULL을 허용하고 여러 개 둘 수 있습니다.
예시로 구분하기
회원 테이블을 만들어 보면 세 키가 어디에 쓰이는지 분명해집니다.
CREATE TABLE users (
id BIGINT PRIMARY KEY, -- 기본키: 행의 대표 식별자
email VARCHAR(255) UNIQUE, -- 유니크키: 이메일 중복 금지
name VARCHAR(50)
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT REFERENCES users(id) -- 외래키: users를 가리킴
);
id는 기본키라 한 회원을 정확히 한 행으로 지목합니다. 값이 비거나 겹치면 어느 회원인지 알 수 없으므로 NULL과 중복이 모두 금지됩니다.
email은 유니크키입니다. 회원을 대표하는 식별자는 아니지만, 같은 이메일로 두 번 가입하는 일은 막아야 합니다. 이렇게 "대표는 아니지만 겹치면 안 되는" 칼럼에 유니크키를 답니다.
orders.user_id는 외래키입니다. 주문이 어느 회원의 것인지 users 테이블을 가리킵니다. 외래키가 있으면 존재하지 않는 회원 ID로는 주문을 넣을 수 없고(참조 무결성), 회원을 지울 때 그 주문을 어떻게 할지도 규칙으로 정할 수 있습니다.
요점 정리
- 기본키는 행의 유일한 대표 —
NULL불가, 테이블당 하나. - 유니크키는 다른 칼럼의 중복만 막는 보조 규칙 — 여러 개 가능, 보통
NULL허용. - 외래키는 다른 테이블과의 연결로 참조 무결성을 지킨다.
PRIMARY KEY·UNIQUE·REFERENCES를 직접 선언하고 중복·참조 위반을 일으켜 어떤 에러가 나는지 확인하는 실습은 데이터베이스 트랙에서 회원가입 없이 무료로 할 수 있습니다.