小编fin*_*ons的帖子

举例说明 2NF 与 3NF

我有第二范式 (2NF) 的问题,我无法使用 Google 解决它。这让我发疯,因为我是一名老师,我不想教我的学生错误的东西。

让我们有一个包含 5 个字段的表。

评分 = {学生姓名、学科代码、学科名称、#考试、成绩}

依赖是这样的:

学生姓名、学科代码、#考试 -> 成绩

主题代码 -> 主题名称

主题名称 -> 主题代码

因此,候选键 1 是{StudentName, SubjectCode, #Exam},候选键 2 是{StudentName, SubjectName, #Exam}

主要属性是{StudentName, SubjectCode, SubjectName, #Exam},非主要属性是Grade

根据第二范式的定义,非主属性不能依赖于候选键的一部分。唯一的非主要属性 (Grade) 不依赖于候选键的一部分,因此该表似乎在 2NF 中。

问题是我认为有些不对劲(我可能是错的)。我认为科目应该有自己的桌子。

评分 = {学生姓名,学科代码,#考试,成绩}

主题 = {主题代码,主题名称}

但是 2NF 不会产生这个。3NF 是关于非主要属性之间的依赖关系,因此它也不会产生这种依赖关系。但在我看来,这是正确的结果,因为它没有冗余。

我猜如果非主要属性被定义为“不是候选键的属性”,2NF 会产生想要的结果。但是我一次又一次地检查了这一点,非主要属性被定义为“不属于候选键的属性”。

我究竟做错了什么?

normalization database-design relational-theory

13
推荐指数
2
解决办法
7202
查看次数