【问题标题】:normalization and normal forms: database规范化和范式:数据库
【发布时间】:2017-04-05 01:49:45
【问题描述】:
很抱歉提出这样的问题。但是当我在考试中写下这些关于 1,2 和 3 范式(条件)的定义时,我弄错了:
1个NF:
- 每一列中的数据应该是原子的。不,多个值用逗号分隔
- 表格不应包含重复的列组
- 使用主键标识每条记录。
2 NF:
- 必须在 1 个 NF 中
- 不得包含冗余数据,如果是,请将其移至单独的表中
- 使用外键创建表
3 NF:
我写错了吗?我的老师不同意。
来源this视频。
【问题讨论】:
标签:
mysql
database
normalization
【解决方案2】:
我认为答案是错误的。您没有使用与规范化相关的术语。这方面的一个例子可以在你对 2NF 的回答中找到
- 不得包含冗余数据,如果还包含,请将其移动到单独的表中
- 使用外键创建表
什么时候数据冗余?您将哪些数据移动到单独的表中?在 2NF 中创建表是否始终是您获取表的一个步骤?
如果你会说:
- 不属于主标识符的所有属性都应完全依赖于整个主标识符。
你仍然在说同样的事情,不允许有多余的数据,但你说它的方式表明你知道什么是规范化。
【解决方案3】:
根据你在考试中的答案:
1个NF:
a.每一列中的数据应该是原子的。不,多个值用逗号分隔
(TRUE,因为 1NF 不支持 Composite 和 Multivalued 属性,更重要的是,该属性在 ER 模型到关系模型的转换过程中默认处理。)对于 1NF,仅此属性就足够了。
b.Table 不应包含重复的列组。
(不需要)
c. 使用主键识别每条记录。
(不需要)
2 NF:
a.必须在 1 个 NF
(真)
b.不能包含冗余数据,如果是,将其移动到单独的表中。
(是的,但是这里我们只关注部分依赖。去除部分依赖对于2NF来说已经足够了。并且在去除部分依赖之后如果仍然存在一些冗余数据,对于2NF来说是可以的。)
c.使用外键创建表
(错误,将表格分成两部分,其中它们之间的共同属性表现为任何分解表的候选键)
示例: R(A,B,C,D) ,假设我们要为 2NF 打破此表,因此分解以 (AB) 和 (BCD) 之类的方式完成,其中 common attribute(HERE: 'B' ) 表现为 (AB) 或 (BCD) ) 中任何一个的候选键。
3 NF:
a.必须在 2NF 中
(不一定正确,即使它不在 2NF 中也可以使用 3NF。当它在 3NF 中时,它会自动满足 2NF 属性)
b.Dose 不包含不完全依赖于主键的列
(写法不对,应该写成“在3NF中,Transitive Dependency(Non prime attributederived prime attribute) is not allowed”)
*记住:始终牢记这一点,遵循 1NF 到 2NF、2NF 到 3NF、3NF 到 BCNF 不是规则,而是约定。意味着您可以直接使用 BCNF(0% 冗余)。
希望这会有所帮助。更多详情,您也可以参考:Detailed explanation of Normal forms