DB 테이블의 primary key를 surroage key를 사용할 것이냐 아니면 natural key(bussiness key라고도 함) 를 사용할 것이냐는 질문은 개발자나 DB 관리자들 사이에서는 고전적인 주제다.
Surrogate key는 business 적인 의미가 전혀 없이 단순히 해당 row를 나타내기 위한 생성한 key 이다.
Surrogate key와는 다르게 natural key는 실제 domain에 관련한 정보를 key로 쓰는 개념이다.
natural key의 가장 큰 문제점은 아무리 고정 값의 필드를 natural key로 사용한다고 하더라도 대부분의 natural key들이 언젠가는 값이 변할수 있다는 것이다. (...) 이와 반면에 surrogate key는 변경되지 않는다. 처음부터 busienss 적인 의미가 없기 때문에 예상치 못하게 변경될 이유가 없는것이다.
Surrogate key의 가장 큰 단점은 DB query가 복잡해진다는 점을 들수 있다. Business적으로 의미가 없는 key를 사용하기 때문에 간단한 query라도 join이 들어가게 되어서 복잡해지게 된다.
Surroage key가 query를 복잡하게 만드는 단점이 있지만 대부분의 경우 값이 변할 가능성이 있는 natural key보다는 surrogate key를 쓰는게 낫다고 생각한다. (...) 물론 그럴 수도 있지만, 값이 절대 안 바뀌는 natural key는 굉장히 드물다고 할 수 있다. 주식 ticker 뿐만이 아니라 책의 ISBN 그리고 심지어 주민번호도 바뀔수 있는 가능성이 있다. 그러므로 대부분의 경우 surrogate key를 사용하는 것이 합리적이다.