我对第二范式(2NF)有疑问,但无法使用Google来解决。这让我发疯,因为我是一名老师,而且我不想向学生们教错误的东西。
让我们有一个包含5个字段的表格。
评分= {学生姓名,学科编号,学科名称,#考试,年级}
依赖性是这样的:
学生姓名,科目代码,#考试->年级
SubjectCode-> SubjectName
SubjectName-> SubjectCode
因此,候选键1是{StudentName,SubjectCode,#Exam},候选键2是{StudentName,SubjectName,#Exam}。
主要属性是{StudentName,SubjectCode,SubjectName,#Exam},非主要属性是Grade
根据第二范式的定义,非素数属性不能取决于候选密钥的一部分。唯一的非素数属性(Grade)不依赖于候选键的一部分,因此该表看起来像2NF。
问题是我认为有些不对(我可能错了)。我认为受试者应该有自己的桌子。
评分= {学生姓名,学科代码,#考试,年级}
主题= {主题代码,主题名称}
但是2NF不会产生这种情况。3NF与非素数属性之间的依赖关系有关,因此也不会产生这种情况。但是在我看来,这是正确的结果,因为它没有冗余。
我想如果非素数属性定义为“不是候选键的属性”,则2NF将产生所需的结果。但是我已经一遍又一遍地检查了这一点,并且非素数属性被定义为“对候选键不信任的属性”。
我究竟做错了什么?