规范化和正常形式:数据库

时间:2014-05-06 12:00:31

标签: mysql database normalization

基本上很抱歉提出这样的问题。但是当我在考试中写下这些定义时,我弄错了1,2和第3范式(条件):

1 NF:

  1. 每列中的数据应为atomic.No,多个值以逗号分隔
  2. 表格不应包含重复列组
  3. 使用主键识别每条记录。
  4. 2 NF:

    • 必须是1 NF
    • 不得包含冗余数据,如果是,请将其移至单独的表
    • 使用外键创建表

    3 NF:

    • 必须在2NF
    • 剂量不包含未完全依赖主键的列

    我写错了吗?我的老师不同意。

    来源this视频。

3 个答案:

答案 0 :(得分:2)

1NF

  

一行数据不能包含重复的数据组,即每列必须具有唯一值。每行数据必须具有唯一标识符。

2NF

  

要规范化为第二范式的表应该满足第一范式的所有需要​​,并且任何列都不能与主键有任何部分依赖关系。这意味着对于具有连接主键的表,表中不属于主键的每列必须依赖于其存在的整个连接键。如果任何列仅依赖于连接键的一部分,则该表将失败第二范式

3NF

  

第三范式适用于表的每个非素数属性必须依赖于主键。应从表中删除传递函数依赖性。该表必须为第二范式。

更多参考资料:

  1. http://www.studytonight.com/dbms/database-normalization.php
  2. http://holowczak.com/database-normalization

答案 1 :(得分:1)

我认为答案是对的。您应该使用与标准化相关的术语。您可以在2NF的答案

中找到此示例
  • 不得包含reduntant数据,如果尚未,请将其移至单独的表格
  • 使用外键创建表

数据何时冗余?您将哪些数据移至单独的表格?创建一个表始终是您在2NF中获取表格的一步吗?

如果你会说:

  • 所有不属于主要标识符的属性应完全依赖于整个主要标识符。

你仍然在说同样的话,不允许冗余数据,但你说的方式表明你知道什么是规范化。

答案 2 :(得分:0)

根据你在考试中的答案:

1 NF:

a。每列中的数据应该是atomic.No,多个值用逗号分隔 (因为1NF不支持Composite和Multivalued属性,因此更重要的是,默认情况下,此属性在ER模型到关系模型转换期间处于关联状态。)只有此属性足以用于1NF。

b.Table不应包含重复的列组。 (不是必需的)

c。使用主键识别每条记录。 (不是必需的)

2 NF:

a.必须在1 NF (TRUE)

b。不得包含冗余数据,如果是,请将其移至单独的表中。 (TRUE但是在这里我们只专注于部分依赖。删除部分依赖对于2NF就足够了。如果一些冗余数据仍然存在,删除它之后,2NF就可以了。)

使用外键创建表 (FALSE,将表分成两部分,其中它们之间的公共属性表现为任何分解表的候选键) 示例:R(A,B,C,D),假设我们想要将此表分解为2NF,因此分解是以(AB)和(BCD)这样的方式完成的,其中共同属性(这里:&#39) ; B')表现为任何(AB)或(BCD)的候选键。

3 NF:

a。必须在2NF (不一定是真的,即使它不是在2NF你可以使用3NF。当它在3NF时,它会自动满足2NF属性)

b。不包含未完全依赖主键的列 (写作方式是错误的,你应该写"在3NF中,不允许传递依赖(非素数属性导出素数属性)")

*记住:始终牢记这一点,在1NF到2NF之后,2NF到3NF,3NF到BCNF不是一个规则,它是一个惯例。意味着您可以直接进入BCNF(0%冗余)。

希望这会有所帮助。有关更多详细信息,您还可以参考:Detailed explanation of Normal forms