标准化 - 2NF和3NF

时间:2015-04-21 12:25:03

标签: normalization database-normalization third-normal-form

https://dba.stackexchange.com/questions/98427/normilsation-2nf-and-3nf

我已经完成了几个问题和youtube教程;我知道2NF正在删除部分依赖关系,而3NF是可传递的依赖关系,但是我无法理解以下示例在2NF中应该是什么样子。

studentID | studentName | courseCode | courseTitle | modCode | modTitle |学分| resultCode为

我对2NF的尝试如下:

学生

studentID | studentName | courseCode | modCode | resultCode为

课程

courseCode | courseTitle

模块

modCode | modTitle |币

这是对的吗?如果没有,我哪里出错,为什么。


以下是3NF:

学生

studentID | studentName | courseCode

课程

courseCode | courseTitle

模块

modCode | modTitle |学分| courseCode

结果

studentID | modCode | resultCode为

同样如此;这是正确的 - 如果不是在哪里以及为什么?

1 个答案:

答案 0 :(得分:0)

好的,让我们来看看你的2NF尝试:

  

<强>学生

     

studentID | studentName | courseCode | modCode | resultCode为

     

<强>课程

     

courseCode | courseTitle

     

<强>模块

     

modCode | modTitle |币

首先谈谈学生

您的密钥不能是studentID,因为resultCode依赖于studentID和courseCode(每个课程都有一个结果)。但是您的studentName仅取决于studentID,因此是密钥的一部分(studentID,courseCode)。因此违反了2NF。你需要做这样的事情:

<强>学生

studentID | studentName | courseCode | MODCODE

<强>课程

courseCode | courseTitle

<强>模块

modCode | modTitle |币

<强>结果

studentID | courseCode | resultCode为

但请记住,这尊重2NF,但似乎仍然不正确,因为模块和课程现在完全不相关。所以试试这个:

<强>学生

studentID | studentName | MODCODE

<强>模块

modCode | modTitle |币

<强>课程

courseCode | courseTitle | MODCODE

<强>结果

studentID | courseCode | resultCode为

一个课程属于一个模块(一个模块有很多课程) - 从我的角度来看。这是自动的2NF(因为键总是只有一个属性(结果除外,但只有一个非键属性总是依赖于两个键属性),所以没有什么可以依赖于&#34;部分&# 34;关键)。它也在3NF,因为每个&#34;物理&#34;实体在数据模型中具有它的逻辑表示(更多的是经验法则而不是形式主义)。


现在让我们来看看你的3NF尝试。我认为你的模块&lt; - &gt;课程依赖是错误的,但我们只关注规范化。

  

<强>学生

     

studentID | studentName | courseCode

     

<强>课程

     

courseCode | courseTitle

     

<强>模块

     

modCode | modTitle |学分| courseCode

     

<强>结果

     

studentID | modCode | resultCode为

这是正确的3NF,因为除 键本身之外根本没有其他关键候选者。因此,不能存在任何传递依赖。

澄清这一点:关键候选者是许多可能键的最小集合之一。在你的关系中,你找到了至少一个具有一个元素的关键候选者(结果关系除外)。所以任何其他关键候选者都不能有多个元素。这意味着,您可以简单地查看每个属性并决定是否可以将其作为关键字?&#34;在您的示例中,您发现没有其他属性可以成为密钥 - 因此它自动在2NF和3NF中。