안녕하세요 김영한 선생님!
선생님 강의 덕분에 스프링 공부 재밌게 하고 있습니다!
다름이아니라 코드 예제에서 테이블을 설계할 때 @GeneratedValue 어노테이션을 사용해서 모든 테이블의 PK를 idx로 잡고 비식별 관계로 연결하는 구조를 짜시던데 이 부분에 질문이 있습니다!
예를 들어 유저 테이블의 아이디 컬럼이 Not Null이고, Unique한 값이라고 할 때 이 컬럼이 유저 테이블의 PK역할을 할 수 있다고 생각하는데, idx 컬럼을 단순히 auto increment 타입으로 설정하게 되면 불필요한 컬럼이 늘어나는게 아닌지 궁금합니다! 테이블에서 Not Null이고, Unique한 컬럼이 있음에도 불구하고 auto increment를 활용한 id를 pk로 잡는것의 장점이 있을까요??
안녕하세요. devyoo님, 공식 서포터즈 코즈위버 입니다.
말씀하신 것처럼 인스턴스가 고유하며 절대 변하지 않는 속성이 있다면 그 속성을 pk로 사용할 수 있습니다. 그러나 보통은 1씩 증가하는 무의미한 숫자값을 식별자로 사용하기를 권하긴 합니다. 이처럼 인스턴스와 무관한 무의미한 숫자 식별자를 '인조식별자'라고 하는데요, 인조식별자를 사용하면 인스턴스가 어떻게 변하더라도 식별자를 바꾸지 않아도 되어 변화에 유연하게 대응할 수 있습니다. 그리고 식별자 자체가 인스턴스의 속성을 지정하지 않으므로, 업무 변경에도 유연하다고 할 수 있습니다 (가령 식별자가, 회원가입일 + 순번 형태로 다음과 같다면 20230625001, 20230625002 ... 당일 가입자가 999명이 넘는 순간 대응하기 곤란하고, 식별자 생성규칙을 시분초를 포함하자와 괕은 변화에도 대응하기 곤란합니다. 그래서 식별자는 업무에 종속되지 않도록 인조식별자를 사용하라고 권합니다.
감사합니다.
답글
Drift Boss are benefits provided at the beginning of each game to help increase your performance.
답글