PK와 UK는 데이터베이스에서 유니크한 값을 보장하기 위해 사용하는 제약 조건이지만, 몇 가지 중요한 차이점이 있습니다.
우선 결론적으로 말하면 PK는 테이블에서 각 행을 고유하게 식별하는 컬럼이고, UK는 특정 컬럼의 값이 고유하다는 것을 보장합니다.
즉, PK는 항상 유니크한 값을 보장하므로 모든 PK는 UK의 특성을 가지고 있다고 할 수 있습니다.

Primary Key (PK)
PK는 테이블에서 각 행(row)을 고유하게 식별하는데 사용되는 키로, 한 테이블당 하나의 PK만 존재할 수 있습니다.
PK는 아래의 특징들을 가지고 있는데요.
- 유일성: PK 컬럼은 반드시 고유한 값을 가져야합니다.
- NULL 값 불가: PK 컬럼에는 NULL 값을 허용하지 않습니다.
- 클러스터드 인덱스 생성(Default): 대부분의 데이터베이스 엔진(MSSQL, MySQL 등)에서 PK는 기본적으로 클러스터드 인덱스를 생성합니다.
- 외래 키(FK) 참조 가능: 다른 테이블의 외래 키(Foreign Key)로 참조될 수 있습니다.
PK는 데이터베이스 관계형 설계에서 참조 무결성을 유지시켜주는 중요한 역할을 합니다.
Unique Key (UK)
UK는 특정 컬럼에 저장된 값이 중복되지 않도록 보장해주는 조건으로, 한 테이블에 여러 개의 UK를 가질 수 있습니다.
UK는 아래의 특징들을 가지고 있습니다.
- 유일성: UK 컬럼은 고유한 값을 가져야 합니다.
- NULL 값 허용: UK 컬럼에는 NULL 값이 허용되며, NULL 값은 중복되지 않는 것으로 간주됩니다. 여러 행에서 NULL 값이 있어도 UK 제약 조건을 위반한 것은 아닙니다.
- 논클러스터드 인덱스(Default): 대부분의 경우 UK는 기본적으로 논클러스터드 인덱스로 생성됩니다.
PK가 아닌 다른 컬럼에서도 유일성을 보장하려는 경우에 사용됩니다.
그럼 PK와 UK를 조금 더 비교해보겠습니다.
우선 PK와 UK는 모두 유일성(중복값을 허용하지 않음)을 가지고 있으며, 인덱스를 생성하는데 사용되서 검색 속도를 높일 수 있다는 공통점을 가지고 있습니다.
차이점은 표로 정리해보았는데요.
Primary Key (PK) | Unique Key (UK) | |
유일성 (Unique) | O | O |
NULL 값 허용 여부 | X (NULL 불가) | O (NULL 허용, 중복으로 취급하지 않음) |
테이블당 개수 | 한 개만 가능 | 여러 개 가능 |
기본 인덱스 타입 | 기본적으로 클러스터드 인덱스 | 기본적으로 논클러스터드 인덱스 |
외래 키(FK) 참조 여부 | 참조 가능 | 참조 가능 |
주요 목적 | 테이블의 각 행을 고유하게 식별 | 특정 컬럼 또는 컬럼 조합의 고유성 보장 |
사용 예시 | 고객 ID, 주문 번호, 회원 번호 등 | 이메일 주소, 사용자 아이디 등 |
다시 한번 마지막으로 정리하자면
PK는 테이블의 핵심 식별자로, 테이블의 전체 설계와 관계에 영향을 미칩니다.
또한 PK는 다른 테이블에서 외래 키로 참조될 가능성이 높아, 테이블 설계의 중심이 됩니다.
UK는 PK 외의 추가적인 고유성을 보장하기 위해서 사용하는데요.
테이블 설계에서 UK는 추가적인 비즈니스 규칙을 적용하는데 사용됩니다.
예를 들어 이메일, 사용자 이름 등은 테이블 내에서 유일해야 하지만, 테이블 전체를 식별하는데 사용되지는 않을 수 있습니다
'방구석 컴퓨터 > 방구석 DB' 카테고리의 다른 글
데이터베이스 인덱싱 (1) | 2024.11.20 |
---|---|
JPA와 프로시저 (1) | 2024.11.13 |
NoSQL과 스프링부트 캐싱 (0) | 2024.10.24 |
RDB와 NoSQL (0) | 2024.10.23 |