안녕하세요.
개발을 하면서 문득 궁금증이 생겨서 질문드립니다.
일반적으로 테이블 생성 시 기본키 생성전략을 어떻게 가져가야 하는지에 따른 고민입니다.
현재 제가 협업에서 개발 진행하면서 테이블을 설계할 경우 크게 3가지를 사용합니다.
1. 년원일시분초+난수 조합을 사용한 20자리 랜덤키
2. 해당 테이블 약어 + SEQ
3. LOG성 테이블은 AUTO_INCREMENT
현재 위처럼 사용하고 있는데 기존에 사용하던 방식을 그대로 따라가다 보니 1번 방식으로 사용하다가
그래도 키 값에 의미는 있어야하니 2번 방식으로 사용했었습니다
이번에 JPA를 공부하면서 강의내용 중 테이블의 키 값은 비즈니스 로직이 들어가지 않는
LONG Type Column + 대체키 + 키 생성전략이라고 써있던데
정확히 이해는 가지 않지만 Mysql이라면 int는 몇 억 row 이상은 데이터가 들어가지 않은 long 타입으로 설정하고 AUTO_INCREMENT를 사용하라
라고 이해했는데 저런식으로 모든 테이블을 사용하면 관계가 있는 테이블과의 외래키 설정이나 이런 부분에서 아예 문제가 없을까요?
저 방식이 아닌 다른 좋은 방식의 키 생성 전략이 있을까요?
3번을 많이 사용합니다.
주민번호, 이메일 등 같은 것을 PK로 사용하지 않고, 임의키를 만들어 쓰는 경우 굳이 키에 의미를 담을 필요가 있나요?
자릿수가 중요하다면 시작값을 필요한 자릿수에서 시작하면 될테니 말입니다. 예, 1,000,000
가능하면 실질식별자를 사용하시는게 좋습니다.
(테이블의 레코드를 유일하게 구별할 수 있는 항목 또는 항목들의 조합)
인조식별자는 딱히 실질식별자가 없을 때 시용하시는 게 좋습니다.
인조식별자를 사용한다면? 식별자 안에 의미를 부여하는 것은 불필요 합니다.