PK를 어떻게 선정하고 설계하는지 알아보자.
1. UNIQUE & NOT NULL 인 컬럼들을 찾는다.
2. 후보 식별자가 없는 경우 임의의 식별자(인조 식별자)를 만들어 부여한다.
- 인조 식별자를 만들어서 사용하는 경우가 은근 많다.
- 인조 식별자를 PK로 사용하는 경우,
year
+month
+sequence number
처럼 날짜를 식별자에 부여하여 데이터를 파악하기 쉽게 할 수 있다. 시퀀스 넘버는 데이터 발생 횟수(순서)로 보면 된다. year
,month
,day
등 의미를 부여하는 정도는 비즈니스 상황에 따라 결정된다.
3. PK의 데이터 타입 결정
- 레코드의 발생 가능한 최대 수를 예측한다.
- ex) 데이터가 1년에 몇 개 정도 발생하는가?
- ex) 데이터가 한 달에 몇 개 정도 발생하는가?
- 발생 가능한 최대 레코드 수를 커버할 수 있는 데이터 타입을 선정한다.
- ex) 만일 레코드가 수십 만개 정도라면
999,999
로 커버 가능하다.int
또는varchar(6)
를 사용하여 처리 가능하다.
- ex) 만일 레코드가 수십 만개 정도라면
4. PK 데이터 타입 후보를 대상으로 다음을 고려한다.
int
등 숫자 타입을 PK로 채택할 경우 자동 증분(AUTO INCREMENT
) 속성을 사용하면 편리하다.String
을 PK로 채택할 경우 숫자가 아닌 문자를 섞어서 PK 값에 의미를 부여할 수 있다.- 특별한 의미를 부여할 필요가 없을 경우 숫자 타입을 사용하는 것이 바람직하다.
- PK는 고유 식별자 기능으로 충분하다.
- PK 값에 어떤 의미를 부여하는 것은 부담이 될 수 있다.