인프런 커뮤니티 질문&답변

와우런님의 프로필 이미지
와우런

작성한 질문수

데이터베이스 중급(Modeling)

Primary Key 선정 기준

작성

·

1.2K

1

안녕하세요, 강의 잘 듣고 있습니다

Primary Key 지정할 때 Unique와 Not Null  두가지가 중요하다고 말씀해 주셨는데요

1. 레코드 최대 수가 int 형 범위 이내이면 굳이 Primary Key 선정에 대해 고민을 안하고 모든 테이블 Primary Key를  id (int형 자동증가)로 설정해도 되나요?

2. 실무에서 id(int 형 자동증가) 로 쓰는 경우가 많은 가요?

3. 수강신청시스템의 경우 학번으로 primary key 지정 vs id(int형 자동증가) 지정 어떤 장단점이 있는지 궁금합니다.

감사합니다!

답변 2

3

이교준님의 프로필 이미지
이교준
지식공유자

좋은 질문입니다. 더미키(seq,...)를 int로 잡고 자동증분을 설정한 경우와 컬럼에 실제로 존재하는 컬럼들로 키를 잡는 것의 차이점을 질문하신 거죠.

자동증분은 매우 편리한 반면 찜찜한 부분이 있습니다. 즉, 자동증분 값 자체가 실제 존재하는 로직과 관계없기 때문에 더미 키라고 부르죠. 아무 의미 없는 더미 키는 Not Null에 Unique한데 의미가 없어요. 즉, 실제 레코드들이 중복되는 것을 막을 방법이 마땅치 않다는 것이죠.

학생 테이블을 보면

1 (PK) 1(학년)3(반)25(번)김민수

2 (PK) 1(학년)3(반)26(번)한창수

이렇게 잘 들어오면 좋겠지만

1 (PK) 1(학년)3(반)25(번)김민수

2 (PK) 1(학년)3(반)25(번)김민수

이런 경우도 가능하죠 !! 그럼 프로그램으로 막아야 하거나, 아니면 쓸데없이 SQL Select 쿼리 던져서 있는지 확인하고 없을 경우 넣어야 겠죠. 암튼 찜찜한 부분이 있네요.

명시적으로 컬럼들을 복합해서 키를 잡는 것은 영원한 진리입니다.

010325,김민수

010326,한창수

네, 절대로 중복 데이터가 들어올 수 없네요.

따라서 기준테이블 또는 절대 마스터 (User Table, 학교 테이블 등등)에는 딱히 부여할 키가 없어요. 그럴땐 무조건 자동증분을 사용하지만 분명히 키가 존재하는 것을 보면서 int 자동증분을 쓴다는 것은 비추입니다.

와우런님의 프로필 이미지
와우런
질문자

고민이 많았던 부분인데 자세한 답변해 주셔서 감사합니다!!

키 선정 할 때 이렇게 하면 되겠네요

1. 자동증분 더미키는 기준테이블 or 절대마스터 같이 딱히 부여할 키가 없을 때 사용

2. 분명한 키가 존재할 경우 더미키는 실제 레코드 중복을 막을 방법이 없으므로 명시적 컬럼들을 복합해서 키로 사용

이교준님의 프로필 이미지
이교준
지식공유자

네 정확하게 이해하셨습니다. 절대마스터와 기준테이블은 성격이 갖습니다. 누군가 나의 PK를 참조하는 것은 존재하지만 나 스스로는 누구의 키도 참조하지 않죠. 이런 경우 더미키와 실제 키가 있을 수 있지만 더미키를 사용하면 일단 관계가 간단해지고, 프로그램을 짤 때 많이 쉬워집니다. 디비를 설계하는 사람은 프로그래머들의 고충도 함께 느끼면서 설계해야 합니다. 만일 1:N으로도 충분한 것을 N:M으로 구현했을 때 디비 설계는 크게 어렵지 않지만 프로그래머들 입장에서는 많이 난감해지죠.

0

많이 배우고 갑니다~!

와우런님의 프로필 이미지
와우런

작성한 질문수

질문하기