더북(TheBook)

키 생성 방법

관계형 데이터베이스로 작업해 본 적이 있다면 카운터나 시퀀스를 사용해 키를 생성해 봤을 것이다. 카운터나 시퀀스는 호출될 때마다 고유한 수를 반환하는 함수다. 데이터베이스 애플리케이션 설계자는 이를 사용해 테이블에 저장되는 로우에 대한 키를 만든다. 이렇게 생성된 각 숫자는 테이블의 각 로우에 대한 고유 식별자로 쓰인다.

카운터 하나로 모든 테이블에 대한 주요 키를 생성할 수도 있고, 테이블마다 별도의 카운터나 시퀀스를 사용할 수도 있다. 어떤 방식이든 간에 테이블에 있는 각 로우는 고유 식별자를 가진다. 키-값 데이터베이스에 있는 키는 한 이름공간에서 고유해야 하며 각 로우에 대한 주요 키는 테이블에서 고유해야 한다.

Tip 관계형 데이터베이스를 설계할 때 키 값으로는 의미 없는 값을 사용하는 것이 좋다.

주요 키의 주목적은 로우를 식별하는 것이다. 특정 고객에 대해 성과 이름 같은 데이터 속성을 사용하여 고객을 식별한다면 중복 문제가 발생할 수 있다. 또한, 로우에 저장되는 이런 속성값은 변경될 수 있다는 문제가 있다.

예를 들어 고객 키에 고객이 사는 주의 약자 2글자를 사용한다고 해보자. 텍사스 주에 사는 캐서린 스미스에 대한 키로 SMITH_K_TX라는 문자열을 사용할 수 있다. 하지만 캐서린 스미스가 일리노이주로 이사하면 이 키는 쓸모없게 된다.

Caution 주요 키는 바뀌면 안 되므로 아무 생각 없이 SMITH_K_IL로 변경해서는 안 된다. 이렇게 하면 주요 키는 불변이라는 원칙을 위반하게 된다. 데이터베이스 관리 시스템이 이러한 변경을 허용한다면 주요 키를 바꿀 수도 있겠지만, 그러면 이 키를 참조하는 다른 테이블의 데이터도 모두 갱신해야만 한다.

로우에 있는 주요 키를 다른 테이블에 저장한 것을 외래 키foreign key라고 한다. 관계형 데이터베이스에서도 그랬듯이 외래 키도 의미 없는 값을 쓰는 편이 좋다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.