inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Cơ sở dữ liệu trung cấp (Mô hình hóa)

Primary Key 선정 기준

1396

wowlearn

1 câu hỏi đã được viết

1

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

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

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

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

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

감사합니다!

PrimaryKey 주식별자 DBMS/RDBMS 기본키 데이터 엔지니어링

Câu trả lời 2

4

kjlee

좋은 질문입니다. 더미키(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 자동증분을 쓴다는 것은 비추입니다.

0

wowlearn

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

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

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

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

0

kjlee

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

0

OR

많이 배우고 갑니다~!

두 FK를 묶어서 PK로 하는 경우에...

0

520

1

SEQ auto increment

0

422

1

사용하시는 프로그램

0

456

2

28분 성별 테이블 유무에 관해 여쭤봅니다.

0

378

1

책구분 테이블 관련 질문드려요

0

420

3

기준 테이블이라는 단어를 처음 사용하셨는데요 ㅜㅜ

0

666

1

데이터베이스 설계시 INT , TINYINT , SMALLINT 이런 걸 선택하는 게 중요한가요?

1

654

1

1:M 과 M:N 선택 질문

0

388

2

기준테이블과 마스터테이블

0

315

1

1정규화 대상 추가질문

0

259

1

안녕하세요 선생님~

0

234

1

테이블명 칼럼을 조인할 때 어떻게 사용한다는 말씀이신지 이해가 되지 않습니다.

0

273

1

seq 칼럼을 pk로 주기에 아까운 이유가 무엇인가요?

0

326

1

useflag 사용하는 이유

0

433

2

숫자 형태의 컬럼 데이터 타입 질문드립니다

0

248

1

PK관련 질문

0

285

1

식별관계 관련

0

273

1

이력 관리 테이블 설계에 대해 질문드립니다

0

5048

2

49 분 대체키를 이용한 select

0

256

1

책구분과 기본목록의 관계에 대해서

0

248

1

1:1관계 질문드립니다.

0

289

1

1:1 관계에 질문이 있습니다.

0

186

2

PK 선정하기

0

372

1

안녕하세요!

0

183

1