学生学科班级排名表的范式判定:属于3NF还是BCNF?
学生学科排名表范式判定
前置规则
- 业务约束:同一学科内不存在并列排名,每个学生参与单学科考核仅对应唯一排名
- 表核心字段:
student_id(学生唯一标识)、subject(考核学科唯一标识)、rank(学科内班级排名)、student_name、student_major、dept_code、dept_name、subject_name、course_credit
非平凡函数依赖集合
(student_id, subject) → rank(subject, rank) → student_idstudent_id → student_name, student_majorsubject → subject_name, course_credit, dept_codedept_code → dept_name
候选键与主属性
- 候选键:
(student_id, subject)、(subject, rank) - 主属性(属于任意候选键的字段):
student_id、subject、rank - 非主属性:其余所有字段(
student_name、student_major、dept_code、dept_name、subject_name、course_credit)
范式判定
3NF判定:不符合
3NF要求不存在非主属性对候选键的传递依赖,所有非平凡函数依赖需满足「决定因素是超键」或「被决定属性是主属性」。
当前存在多处违规依赖:
student_id → student_name:决定因素student_id不是超键,被决定属性为非主属性subject → subject_name:决定因素subject仅为候选键组成部分,不是超键,被决定属性为非主属性dept_code → dept_name:决定因素不在任何候选键中,被决定属性为非主属性
以上均为非主属性对候选键的传递依赖,不满足3NF要求。
BCNF判定:不符合
BCNF要求所有非平凡函数依赖的决定因素必须为超键,当前上述依赖的决定因素均非超键,远未达到BCNF标准。
内容的提问来源于stack exchange,提问作者Young JooJ
相关产品推荐
相关产品推荐

