어느 순간부터 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
MySQL의 경우 UUID 문자열로 하면 심각한 성능저하가 발생할 수 있습니다. 정확히 얘기하면 "PK는 무조건 순차 증가하는 값이어야 성능저하가 없다" 이런 제약조건 같은게 있어서요. AUTO_INCREMENT가 딱 이걸 만족시키죠. 제약조건 같지만 이로인한 장점도 나름 있는거고요. 자세한 것은 Real MySQL같은 책에 나옵니다.(사실 설명할 자신이 없네요.. ^^)
MySQL과 비슷하게 구현한 DB들이 좀 있을거같아요. 따라서 DB 종류를 봐가면서 해야 할 것으로 보여요.
두번째 문제로 꼽을만한게, 보통 auto_increment가 Sequence 기반으로 할 경우 ID값 정렬과 데이터 생성 시간 정렬이 동일한 경우가 많습니다. ID 기반 정렬을 하는 것이 많을 경우 이 상황에 대한 대비도 좀 필요할 것 같구요. 물론 시간 컬럼을 넣는 경우가 매우 많기 때문에 사실 큰 문제는 안 될 수 있어보이네요.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.