我知道实际上1NF是什么,这是我设计数据库时的规则。我在企业级别上做得不多,但到目前为止我的设计都做得很好。我在照顾1NF时检查以下情况。让我举一个电话簿的例子,其中人们有多个电子邮件地址和多个联系号码,如家庭,移动,工作1,工作2,并可以添加更多。
这是我的架构,未规范化: 电话簿 first_name,middle_name,last_name,email_1,email_2,email_3(将来可能会添加更多内容),mobile_1,mobile_2,work_1,work_2,(还会添加更多内容)。
按照第一范式
我无法理解这一点的含义。
答案 0 :(得分:1)
1& 2表示数据的显示顺序无关紧要。没有行或列指示其他行或列中应包含哪种数据。
3非常明显。
4表示您不是在一个字段中存储数据组合,即一个AnimalAndVegetable,其值为'HorsePear',而是您有一个Animal列和一个Vegetable列。
5类似于4,它只是意味着你没有通过字段值来解析以获得“真实”数据,即存储包含由在使用id之前要丢弃的标记包围的id的字段< / p>
答案 1 :(得分:1)
- 这些行没有自上而下的排序。
- 列中没有从左到右的排序。
醇>
这只是关系世界的一个基本原则:表行和列表示的所有集合和关系都是无序的。您不应该依赖代码中特定的行或列顺序。
- 没有重复的行。
醇>
关系应该是唯一的,否则很快就会出现数据完整性问题。想象一下,如果您的电话簿包含您朋友的两次数据,会发生什么?当您的朋友更改其电话号码时,其中一个关联的行肯定会更新,但另一个可能不会更新。现在猜猜当人们试图查找他的电话号码时会发生什么......
- 每个行 - 列交集都只包含适用域中的一个值(而不是其他任何内容)。
醇>
即。您不应该包含"x,y,z"
之类的值,其中单个文本字段实际上由更原始值的列表组成。
我相信这说明你的行只能用他们的密钥识别,而这些应该是“正常的”,完整的列值,不包含在例如标记文本。