테이블의 PK 설계시 문의 0 1 1,248

by kjp [DB 모델링/설계] primarykey surrogatekey [2020.04.22 13:51:28]


지인 회사의 경우 
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를 많이 사용하는 추세인지 궁금합니다.

 

 

by 마농 [2020.04.22 15:34:46]

추측성 댓글입니다.
오라클만 접하던 저는
MSSQL 이나 MySQL 테이블 보면 항상 identity 항목을 PK 로 잡아놔서 항상 의아했었는데.
아직도 의문이 해소되지는 않았습니다.
누가 좀 알려주세요~
MSSQL 이나 MySQL 에서는 관습처럼 사용해 왔을 것 같다는 생각도 들고요.
테이블의 구조가 달라서 그럴 것 같다는 생각도 들고요.
오라클은 힙테이블 구조이고, MSSQL 은 Cluster 테이블 구조라서 그런 듯 합니다.

모델링 책에서는 보통 실질식별자를 사용하는것을 추천하고
인조식별자 사용이 필요한 경우에 대해 예외적으로 기술되어 있습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입