반응형
1. 고유 키 (Unique Key)
고유 키는 테이블 내에서 특정 컬럼(또는 컬럼 조합)이 중복되지 않도록 보장하는 제약 조건입니다.
특징:
• 같은 테이블 내에서 여러 개의 고유 키를 가질 수 있음.
• NULL 값을 허용할 수도 있음 (NULL은 중복으로 간주되지 않음).
• UNIQUE 제약 조건을 설정하면 해당 컬럼 값은 중복되지 않음.
• 보조 인덱스(Secondary Index) 역할을 하여 검색 성능을 높일 수도 있음.
예제:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE, -- 이메일은 중복될 수 없음 (고유 키)
username VARCHAR(50) UNIQUE -- 사용자명도 중복 불가 (고유 키)
);
2. 주 키 (Primary Key)
주 키는 테이블에서 각 행을 유일하게 식별하는 키입니다.
특징:
• 하나의 테이블에는 하나의 주 키만 존재 가능.
• NULL 값을 허용하지 않음.
• 자동으로 고유 키(Unique Key) 속성을 가짐, 즉 중복된 값을 저장할 수 없음.
• 보조 인덱스가 아닌 **클러스터형 인덱스(Clustered Index)**로 동작.
예제:
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- 주 키 (자동 증가 ID)
email VARCHAR(255) UNIQUE,
username VARCHAR(50) UNIQUE
);
3. 고유 키 (Unique Key) VS 주 키 (Primary Key) 차이점 정리
| 구분 | 고유 키 (Unique Key) | 주 키 (Primary Key) |
| 개수 | 여러 개 가능 | 테이블당 하나만 가능 |
| NULL 허용 여부 | NULL 허용 가능 | NULL 불가능 |
| 중복 허용 여부 | 중복 불가 | 중복 불가 |
| 인덱스 유형 | 보조 인덱스(Secondary Index) | 클러스터형 인덱스(Clustered Index) |
| 목적 | 특정 컬럼의 고유성 보장 | 테이블의 각 행을 유일하게 식별 |
4. 주 키와 고유 키를 함께 사용하는 경우
테이블에서 id를 주 키로 사용하면서, email을 고유 키로 설정하는 경우가 많음.
CREATE TABLE customers (
customer_id UUID PRIMARY KEY, -- 주 키 (각 고객을 유일하게 식별)
email VARCHAR(255) UNIQUE, -- 이메일 중복 방지
phone VARCHAR(20) UNIQUE -- 전화번호 중복 방지
);
- customer_id는 주 키로, 고객을 유일하게 식별.
- email과 phone은 고유 키로, 중복 저장을 방지하지만 NULL을 허용할 수도 있음.
5. 언제 어떤 키를 사용해야 할까?
- 주 키 (Primary Key)
- 테이블의 각 행을 유일하게 식별해야 할 때 사용.
- NULL 값이 없어야 할 경우.
- 보통 id 컬럼을 주 키로 설정.
- 고유 키 (Unique Key)
- 특정 컬럼 값이 중복되지 않아야 하지만 주 키로 사용할 필요는 없는 경우 사용.
- 예: 이메일, 사용자명, 전화번호 등의 데이터.
✅ 최종정리
- 주 키는 각 행을 유일하게 식별하는 필수 키 (NULL 허용 ❌).
- 고유 키는 특정 컬럼의 중복을 막는 제약 조건 (NULL 허용 가능).
- 주 키는 한 테이블에 하나만 존재 가능, 고유 키는 여러 개 가능.
- 주 키는 자동으로 고유 키의 성격을 가짐, 하지만 고유 키가 반드시 주 키일 필요는 없음.
반응형
'Dev > ETC. Dev' 카테고리의 다른 글
| GitHub SSH 연결하기 (for Mac) (3) | 2025.04.27 |
|---|---|
| RESTful API 설계가 답일까? 기능 중심 URL로 바꾸기까지의 기록 (0) | 2025.04.13 |
| UUID 버전별 차이와 사용법 정리 (0) | 2025.04.09 |
| [DB] UUID를 사용한 고유한 ID 시스템의 장점과 적용 방법 (0) | 2025.03.23 |
| Git Branch 추가, Branch commit push, Merge (0) | 2024.10.05 |