인프런 커뮤니티 질문&답변
BCNF 질문
작성
·
13
0
마지막에 professor_name을 pk로 두고 그에 따라 1:1이기때문에 과목명을 그냥 컬럼으로 두셨는데 그러면 그 과목명이 만약에 바뀐다면 (데이터베이스 -> DB) 그렇다면 데이터베이스 수업을 하는 모든 교수님의 컬럼을 바꾸어야하니 갱신이상이 일어나는것 아닌가요?
이런 경우는 어떤 정규형을 위반한건지 궁금합니다.
퀴즈
데이터베이스 정규화의 주된 목적은 무엇일까요?
데이터 검색 속도 향상
데이터 중복 최소화 및 일관성 유지
데이터 암호화 수준 강화
물리적 저장 공간 확장
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. escho94님.
질문해주신 내용은 데이터베이스 정규화, 특히 BCNF(보이스-코드 정규형)과 관련된 것입니다. 현재 상황에서 갱신 이상이 발생할 수 있는 이유와 어떤 정규형을 위반했는지 살펴보겠습니다.
갱신 이상 및 정규화 문제
갱신 이상(update anomaly): 말씀하신 대로, 특정 컬럼(과목명)이 변경될 때 여러 레코드의 값이 함께 변경되어야 하는 경우가 발생합니다. 이는 데이터 무결성을 유지하기 어려운 상황을 초래합니다. 이러한 상황은 일반적으로 테이블에 중복된 정보가 존재할 때 발생합니다.
BCNF 위반 가능성: BCNF 정규형은 모든 결정자(결정하는 속성)들은 후보 키에 속해야 한다는 규칙을 따릅니다. professor_name을 기본키로 사용하고, subject_name이 바뀔 때 모든 관련 레코드가 함께 바뀌어야 한다면, 이는 비결정적인 속성이 후보 키가 아닌 다른 속성에 의존한다는 것을 의미할 수 있습니다. 즉, subject_name이 professor_name에 종속적이지 않으며, 이로 인해 BCNF를 위반하게 됩니다.
해결책
이러한 문제를 방지하기 위해서는 과목명을 별도의 테이블로 분리하여 과목 ID와 이름을 매칭시키고, 교수 테이블에서는 과목 ID만을 참조할 수 있도록 설계합니다. 이렇게 하면 과목명이 바뀔 때 과목 테이블의 한 레코드만 수정하면 되므로 갱신 이상의 문제가 해결됩니다.
관련 참고 링크
위의 내용을 바탕으로, 데이터베이스 정규화를 통해 갱신 이상을 피하고 BCNF 규칙을 유지하실 수 있기를 바랍니다. 추가적으로 더 궁금한 점이 있으시면 언제든지 질문해 주세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




