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 값에 어떤 의미를 부여하는 것은 부담이 될 수 있다.