지인 회사의 경우
DB 설계시 기본 정책이 PK는 Surrogate Key로 설계하라(그냥 자동 생성number)는 것이라고 합니다.
(별도로 unique한 natural key가 있음에도 불구하고, Surrogate Key로 설계.
하지만 실제 조회/검색 요청은 해당 natural 값 위주로 요청됨)
연관관계 테이블들이 모두 PK가 surrogate key이면 surrogate key를 FK로 참조하고 있으면,
해당 실제 natural 요청 값으로 조회시 join등이 더 발생하게 될텐데요.
예를 들면,
table product (
product_id bigint // Primary Key (Surrogate Key)
serial_no varchar // Unique
.....
)
table product_statistics (
......
product_id bigint // FK (tb_product.product_id)
......
)
외부에서의 product_statistics에서 각종 검색/조회/통계 요청이 serial_no 기반으로 들어오면 join 발생.
위의 예는 단순한 case지만, 현업에서는 더 복잡한 이슈가 생길 듯 한데요.
혹시 이러한 Primary Key/Surrogate Key설계와 관련해서
최근 DB 개발 트랜드/DB 개발자들의 추세 같은 것이 있을까요?
그냥 상황에 따라 다 다른 건지, 요즘은 surrogate key를 많이 사용하는 추세인지 궁금합니다.
추측성 댓글입니다.
오라클만 접하던 저는
MSSQL 이나 MySQL 테이블 보면 항상 identity 항목을 PK 로 잡아놔서 항상 의아했었는데.
아직도 의문이 해소되지는 않았습니다.
누가 좀 알려주세요~
MSSQL 이나 MySQL 에서는 관습처럼 사용해 왔을 것 같다는 생각도 들고요.
테이블의 구조가 달라서 그럴 것 같다는 생각도 들고요.
오라클은 힙테이블 구조이고, MSSQL 은 Cluster 테이블 구조라서 그런 듯 합니다.
모델링 책에서는 보통 실질식별자를 사용하는것을 추천하고
인조식별자 사용이 필요한 경우에 대해 예외적으로 기술되어 있습니다.