1NF - 试图理解维基文章

时间:2011-08-12 15:55:18

标签: sql

我知道实际上1NF是什么,这是我设计数据库时的规则。我在企业级别上做得不多,但到目前为止我的设计都做得很好。我在照顾1NF时检查以下情况。让我举一个电话簿的例子,其中人们有多个电子邮件地址和多个联系号码,如家庭,移动,工作1,工作2,并可以添加更多。

这是我的架构,未规范化: 电话簿 first_name,middle_name,last_name,email_1,email_2,email_3(将来可能会添加更多内容),mobile_1,mobile_2,work_1,work_2,(还会添加更多内容)。

  1. 如果数据在列中重复,请说email_address,则必须将其移动到单独的表电子邮件详细信息中,并且必须在主表中使用该ID。
  2. 我避免使用群组,例如当人们拥有多个电子邮件帐户(如email_1,email_2)时,可以避免查询某个人拥有的电子邮件地址数量或执行删除操作。
  3. 始终放置主键以唯一标识行,这有助于删除记录。
  4. 按照第一范式

    1. 这些行没有自上而下的排序。
    2. 列中没有从左到右的排序。
    3. 没有重复的行。
    4. 每个行 - 列交集都只包含适用域中的一个值(而不是其他任何内容)。
    5. 所有列都是常规的[即行没有隐藏的组件,如行ID,对象ID或隐藏的时间戳]。
    6. 我无法理解这一点的含义。

2 个答案:

答案 0 :(得分:1)

1& 2表示数据的显示顺序无关紧要。没有行或列指示其他行或列中应包含哪种数据。

3非常明显。

4表示您不是在一个字段中存储数据组合,即一个AnimalAndVegetable,其值为'HorsePear',而是您有一个Animal列和一个Vegetable列。

5类似于4,它只是意味着你没有通过字段值来解析以获得“真实”数据,即存储包含由在使用id之前要丢弃的标记包围的id的字段< / p>

答案 1 :(得分:1)

  
      
  1. 这些行没有自上而下的排序。
  2.   
  3. 列中没有从左到右的排序。
  4.   

这只是关系世界的一个基本原则:表行和列表示的所有集合和关系都是无序的。您不应该依赖代码中特定的行或列顺序。

  
      
  1. 没有重复的行。
  2.   

关系应该是唯一的,否则很快就会出现数据完整性问题。想象一下,如果您的电话簿包含您朋友的两次数据,会发生什么?当您的朋友更改其电话号码时,其中一个关联的行肯定会更新,但另一个可能不会更新。现在猜猜当人们试图查找他的电话号码时会发生什么......

  
      
  1. 每个行 - 列交集都只包含适用域中的一个值(而不是其他任何内容)。
  2.   

即。您不应该包含"x,y,z"之类的值,其中单个文本字段实际上由更原始值的列表组成。

  1. 所有列都是常规的[即行没有隐藏的组件,如行ID,对象ID或隐藏的时间戳]。
  2. 我相信这说明你的行只能用他们的密钥识别,而这些应该是“正常的”,完整的列值,不包含在例如标记文本。