PK 설계 시 고려 사항

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)를 사용하여 처리 가능하다.

4. PK 데이터 타입 후보를 대상으로 다음을 고려한다.

  • int 등 숫자 타입을 PK로 채택할 경우 자동 증분(AUTO INCREMENT) 속성을 사용하면 편리하다.
  • String 을 PK로 채택할 경우 숫자가 아닌 문자를 섞어서 PK 값에 의미를 부여할 수 있다.
  • 특별한 의미를 부여할 필요가 없을 경우 숫자 타입을 사용하는 것이 바람직하다.
  • PK는 고유 식별자 기능으로 충분하다.
    • PK 값에 어떤 의미를 부여하는 것은 부담이 될 수 있다.