DB 설계할 때 table id는 어떤 방식을 사용하나요?

2015-12-01 12:59

어느 순간부터 DB id를 설계할 때 특별히 신경을 쓰지 않은 것 같네요. 최근에는 JPA 사용하면서 무의식적으로 auto increment를 사용하고 있어요. 물론 auto increment가 적합한 경우도 있겠지만 그렇지 않은 경우도 많다고 생각해요. 보통 DB 설계할 때 각 테이블의 id는 어떤 방식을 사용하나요?

UUID를 사용하는 것도 하나의 방식이 될 수 있을거 같은데요. UUID 사용에 따른 장단점은 JPA Implementation Patterns: Using UUIDs As Primary Keys 문서에서 다루고 있고, 단점을 극복하는 방법을 댓글에서 볼 수 있네요.

테이블 id를 설계할 때 어떤 방식으로 접근하나요? 저는 요즘 너무 아무 생각없이 id를 추가하고 있다는 마음이 들어 질문 남겨 봅니다.

0개의 의견 from FB

1개의 의견 from SLiPP

2015-12-01 13:28

MySQL의 경우 UUID 문자열로 하면 심각한 성능저하가 발생할 수 있습니다. 정확히 얘기하면 "PK는 무조건 순차 증가하는 값이어야 성능저하가 없다" 이런 제약조건 같은게 있어서요. AUTO_INCREMENT가 딱 이걸 만족시키죠. 제약조건 같지만 이로인한 장점도 나름 있는거고요. 자세한 것은 Real MySQL같은 책에 나옵니다.(사실 설명할 자신이 없네요.. ^^)

MySQL과 비슷하게 구현한 DB들이 좀 있을거같아요. 따라서 DB 종류를 봐가면서 해야 할 것으로 보여요.

두번째 문제로 꼽을만한게, 보통 auto_increment가 Sequence 기반으로 할 경우 ID값 정렬과 데이터 생성 시간 정렬이 동일한 경우가 많습니다. ID 기반 정렬을 하는 것이 많을 경우 이 상황에 대한 대비도 좀 필요할 것 같구요. 물론 시간 컬럼을 넣는 경우가 매우 많기 때문에 사실 큰 문제는 안 될 수 있어보이네요.

의견 추가하기

연관태그

← 목록으로