해결된 질문
작성
·
169
0
위 가정과 설명해주시는 내용을 봤을 때, (교수번호) -> (과목번호) 에 대한 FD가 있다고도 보이는데 맞을까요? "교수를 알면 과목을 알 수 있다"는 가정은 없기 때문에 종속성이 없다고 가정하신 건지 궁금합니다.
테이블 이름이 '수강'이기 때문에 학생이 과목을 수강하는 것이 더 적절하다고 설명하시는 맥락이 있는데, BCNF 정규화 보다도 테이블 pk를 학생, 교수를 대상으로 설정한 것 자체가 문제인 것 같아 보이기도 하네요.
답변 2
1
네. 간단한 설정을 하기 위해서 위와같이 가정을 했어요. 정확한 내용은 학생과 과목이 있어야 하고 이 둘은 수강이라는 관계로 연결됩니다. 과목을 알고 사실은 시간, 학년 등 몇가지 정보가 더 있어야 해당 교수를 (참조를 통해서) 찾을 수 있는거죠. 이렇게 되면 설명이 복잡해서 그냥 교수와 과목이 매핑된다고 가정하기 위함이었습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 내용에 기반하여, “교수번호 -> 과목번호” 에 대한 함수적 종속성(FD)의 존재 여부는 설계된 데이터베이스 스키마와 실제 비즈니스 규칙에 따라 달라질 수 있습니다. 만약 한 교수가 오직 하나의 과목만을 가르친다는 비즈니스 규칙이 있다면, “교수번호 -> 과목번호”에 대한 함수적 종속성이 존재한다고 볼 수 있겠죠. 하지만, 현실에서는 대부분의 교수가 여러 과목을 가르칠 수 있으므로, 이러한 종속성을 일반적으로 가정하기는 어려울 수 있습니다.
수강 테이블의 경우, 주로 학생과 과목 간의 관계를 나타내기 때문에, 학생과 과목을 이 관계의 주요 엔티티로 보고 이를 기반으로 테이블을 설계하는 것이 일반적입니다. 학생ID와 과목ID를 합성 주요키(Primary Key, PK)로 사용하는 것이 자연스러울 것입니다. 여기서 교수를 대상으로 PK를 설정하는 것은, 해당 비즈니스 규칙에 따라 다를 수 있지만, 보통 ‘수강’의 주된 관심사가 학생에 의한 과목 수강이라는 점에서는 다소 이례적인 설계로 볼 수 있습니다.
BCNF(Boyce-Codd Normal Form) 정규화는 모든 결정자가 후보 키인 관계를 만족해야 하는 강력한 정규형입니다. 만약 교수번호와 과목번호 사이에 분명한 함수적 종속성이 있다면, 이를 적절하게 고려하여 정규화 과정을 거쳐야 할 것입니다. 그러나 실제로는 교수와 과목 사이의 다대다 관계가 존재할 수 있으므로, 이를 정확히 모델링하는 것이 중요합니다.
결론적으로, 테이블을 BCNF 정규화 상태로 유지하기 위해서는 실제 비즈니스 규칙과 데이터 간의 관계를 정확히 이해하고 이에 기반하여 적절한 함수적 종속성을 정의하고 테이블 구조를 설계하는 것이 필수적입니다.