inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

김영한의 실전 데이터베이스 - 설계 1편, 현대적 데이터 모델링 완전 정복

BCNF 정규형

BCNF 정규화에 대한 질문

121

bbcc8417

작성한 질문수 22

0

professor_bcnf, enrollment_bcnf로 테이블을 분리하는 과정에서 질문이 있습니다.

 

sql mysql dbms/rdbms 소프트웨어-설계 SQLD

답변 2

0

김영한

안녕하세요. bbcc8417님

쉬운 예시로 설명하기 위해 이렇게 만든 것으로 이해하시면 됩니다 🙂

실무에서는 말씀드린 것 처럼 자연키 보다는 대리키를 기본키로 사용하는 것이 좋겠지요?

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. bbcc8417님.

BCNF(보이스-코드 정규형)는 데이터베이스 정규화 단계 중 하나로, 모든 결정자가 후보키가 되어야 하는 조건을 만족하도록 테이블을 설계하는 것입니다. 이 과정에서 자연키인 professor_name을 기본키로 사용하는 것에 대한 우려를 질문 주셨군요.

자연키를 기본키로 사용하는 경우의 주의점

  1. 변경 가능성: 이름과 같은 자연키는 변경될 가능성이 있습니다. 만약 이름이 변경될 경우, 기본키로 사용되고 있는 값 역시 변경되어야 하며 이는 데이터의 무결성과 일관성을 유지하는 데 문제가 될 수 있습니다.

  2. 중복 위험성: 이름의 경우 중복될 가능성이 있습니다. 동일한 이름을 가진 다른 교수들이 존재할 수 있기 때문에 professor_name을 기본키로 사용하는 것은 충돌 위험을 초래합니다.

이를 방지하기 위해 보통 자연키 대신에 변화 가능성이 적고 유일한 대리키(예: professor_id)를 사용합니다. 대리키는 시스템 내부에서만 의미를 가지며, 외부에서는 표현되지 않는 고유한 식별자 역할을 합니다.

해결 방안

  • 대리키 사용: professor_id와 같은 대리키를 기본키로 사용하고, professor_name 외의 학문적 식별자로 사용하는 것이 안전합니다.

  • 유니크 제약 추가: professor_name 필드에 유니크 제약을 추가하여, 동일한 이름을 허용하지 않음으로써 자연키의 문제점을 일부 해결할 수 있습니다.

참고할 만한 링크

이번 답변이 BCNF 정규화와 자연키/대리키 사용에 대한 이해를 돕는 데 도움이 되었으면 합니다. 추가적인 질문이나 더 궁금한 점이 있으시면 언제든지 말씀해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

실제로 작은 기업에서 기획 롤

1

12

1

order_product 까마귀발

0

22

1

[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.

0

48

1

자연키 vs 대리키 실무질문

0

26

1

1:N 관계에서 중간테이블 (연관엔티티)

0

53

2

일대일 fk 위치

0

43

1

제 3 정규형 vs BCNF 정규형 차이점?

0

93

3

BCNF 질문

0

76

2

연관 엔티티 네이밍 규칙

0

50

1

진짜 강의 듣는거 너무 고문

0

138

1

28강 sql 파일 어딨나여?

0

92

1

2NF의 엄밀한 정의

0

73

1

comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.

0

123

3

학습중인 수업자료를 받아볼 수 있을까요??

0

102

2

수업자료 pdf파일관련 건의 - 제목 링크위치 개선

0

88

2

서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문

1

106

2

실무적인 설계로 접근했을 때 제 2정규형 항상 만족?

0

81

1

슈퍼/서브 타입 joined 전략

0

73

2

created_at 관련 구현과 DB ENUM에 대해

0

73

1

M:N 관계의 연관 엔티티 설계 순서

0

81

2

데이터 역사성 훼손 문제

0

67

2

실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.

0

84

1

구글이 이메일 변경을 허용하는 이유

0

125

1

order_item 테이블 (order_id, product_id) 유니크 제약조건 누락

0

100

2