为什么这张表没有标准化?

时间:2015-10-09 07:15:41

标签: sql normalization

我正在学习数据库课程,我正在学习表格规范化。

enter image description here

有人可以向我解释,为什么右边第一行的第二张表没有规范化?

4 个答案:

答案 0 :(得分:2)

因为
没有归一化 对于已签署多门课程的学生,表格中的条目为:
23 Jake Smith CS101 B +
23 Jake Smith B102 C +
显然数据正在重复(冗余数据)。它导致异常(插入,更新,删除异常)
例如:
当您必须更改学生名称Jake Smith时,您必须修改所有行,这称为更新异常。


规范化用于避免这些异常和冗余数据存储。
第二行右侧的表以更好的方式处理这种情况,因为它将id, name and DOB存储在一个单独的表中,使用id属性可以轻松地进行编辑一排。
有几种常规形式,如1NF,2NF,3NF等。每种常规形式都有一些与之相关的约束。每个高级形式都比前一个更严格。

答案 1 :(得分:0)

我想这是学生成绩的表格。它没有标准化,因为它直接包含学生姓名,而不是对学生记录的引用。

最好不要将student_name包含在此表中,而是将所有学生数据存储在单独的students表中,并通过student_id外键引用它(类似于第二行中的第一个表除外) ids。)。

答案 2 :(得分:0)

它未正常化,因为idstudent_name都不是密钥(两者都有重复项),因此密钥必须是其中之一(可能是id)科目编号。另一个(name)则不依赖于该密钥,而只依赖于id

3NF的简单规则是每个非关键列必须依赖于键,整个键,除了关键字" - 我们都庄严地誓言"所以帮助我Codd"!

较高的普通形式处理密钥部分内的依赖关系。

答案 3 :(得分:-1)

因为在你的第一个右表中你有两次值

  

23 - j.smith

重复并且不遵守Codd 1正常形式