키 생성 방법
관계형 데이터베이스로 작업해 본 적이 있다면 카운터나 시퀀스를 사용해 키를 생성해 봤을 것이다. 카운터나 시퀀스는 호출될 때마다 고유한 수를 반환하는 함수다. 데이터베이스 애플리케이션 설계자는 이를 사용해 테이블에 저장되는 로우에 대한 키를 만든다. 이렇게 생성된 각 숫자는 테이블의 각 로우에 대한 고유 식별자로 쓰인다.
카운터 하나로 모든 테이블에 대한 주요 키를 생성할 수도 있고, 테이블마다 별도의 카운터나 시퀀스를 사용할 수도 있다. 어떤 방식이든 간에 테이블에 있는 각 로우는 고유 식별자를 가진다. 키-값 데이터베이스에 있는 키는 한 이름공간에서 고유해야 하며 각 로우에 대한 주요 키는 테이블에서 고유해야 한다.
Tip 관계형 데이터베이스를 설계할 때 키 값으로는 의미 없는 값을 사용하는 것이 좋다.
주요 키의 주목적은 로우를 식별하는 것이다. 특정 고객에 대해 성과 이름 같은 데이터 속성을 사용하여 고객을 식별한다면 중복 문제가 발생할 수 있다. 또한, 로우에 저장되는 이런 속성값은 변경될 수 있다는 문제가 있다.
예를 들어 고객 키에 고객이 사는 주州의 약자 2글자를 사용한다고 해보자. 텍사스 주에 사는 캐서린 스미스에 대한 키로 SMITH_K_TX라는 문자열을 사용할 수 있다. 하지만 캐서린 스미스가 일리노이주로 이사하면 이 키는 쓸모없게 된다.
Caution 주요 키는 바뀌면 안 되므로 아무 생각 없이 SMITH_K_IL로 변경해서는 안 된다. 이렇게 하면 주요 키는 불변이라는 원칙을 위반하게 된다. 데이터베이스 관리 시스템이 이러한 변경을 허용한다면 주요 키를 바꿀 수도 있겠지만, 그러면 이 키를 참조하는 다른 테이블의 데이터도 모두 갱신해야만 한다.
로우에 있는 주요 키를 다른 테이블에 저장한 것을 외래 키foreign key라고 한다. 관계형 데이터베이스에서도 그랬듯이 외래 키도 의미 없는 값을 쓰는 편이 좋다.