Page 12 -
P. 12
이 예제에서 텍스트 기반 기본키인 CustomerID는 회사 이름(CompanyName)과
연관된다는 것이 비즈니스 규칙이라고 가정한다. 어느 한 회사 이름을 변경
하려면 키 값을 결정하는 비즈니스 규칙을 반영해 CustomerID도 갱신해야 한
다. 기본키 값이 변경되므로 관련된 테이블에도 변경이 전파되어야 한다. 의
미 없는 값을 키로 사용한다면 CustomerID 값을 변경하거나 갱신할 필요가
없지만, 비즈니스 규칙을 준수하는 값을 표시하려면 텍스트 기반 컬럼을 유
지해야 한다.
텍스트 기반 컬럼을 기본키로 사용하는 이유는 중복 값 입력을 막을 수 있기
때문이라는 의견이 일반적이다. 예를 들어 CompanyName을 기본키로 만든다면
회사 이름은 중복되지 않아야 한다. 하지만 Customers 테이블의 CompanyName
에 유일 인덱스를 추가해 이름이 중복되지 않게 하는 것이 더 쉽다. 이렇게
하면 무결성을 확보하면서 여전히 자동 생성된 숫자 값을 기본키로 사용할
수 있다. 여기에 ‘BETTER WAY 2. 중복으로 저장된 데이터 항목을 제거하
자’와 ‘BETTER WAY 4. 컬럼당 하나의 특성만 저장하자’에서 권고하는 내
용을 적용한다면 더욱 잘 작동할 것이고, 그림 1-1에서 지적한 문제점을 피
하는 데도 도움이 된다. 반면에 텍스트 기반 기본키를 사용하면 숫자키로 연
결된 값(그림 1-2에서 CompanyName)을 가져오려고 참조 테이블과 조인할 필
요가 없으므로 SQL 문이 좀 더 간략하다.
기본키로 숫자가 나은지 텍스트 기반이 나은지는 데이터베이스 전문가 사이
에서도 큰 이견이 있다. 책에서는 이런 논쟁에서 어느 한쪽만 편을 들지는 않
을 것이다. 핵심은 기본키로 사용하는 컬럼은 반드시 유일한 값을 가져야 한
다는 점이기 때문이다.
또 복합 기본키(Compound Primary Key)는 다음 두 가지 이유에서 효율성이 떨
어지므로 사용하지 않는 것이 좋다.
1장 데이터 모델 설계 035
SQL 코딩의 기술(본문)최종.indd 35 2017-11-15 오후 11:27:49