以下哪些定义解释了 1NF?

问题描述 投票:0回答:2

当我试图在谷歌中查找 1NF 的定义时,我发现它很模糊。

  • 一些网站(例如thisone)表示,当表格没有任何重复的列集时,该表格处于第一范式。

  • 其他一些人(大多数)说同一列中不应该存在同一域的多个值。

  • 他们中的一些人说,所有表都应该有主键,但其他一些人根本不谈论主键!

有人可以帮我解释一下吗?

database database-normalization first-normal-form
2个回答
2
投票

如果一个关系具有以下属性:其域中都不包含本身为集合的元素,则该关系处于第一范式。

来自 E. F. Codd(1972 年 10 月)。 《数据库关系模型的进一步规范化》

这确实是它的本质,但是发明了关系数据库模型的人。

当某些内容处于第一范式时,不存在本身包含数据集的列。

关于第一范式的维基百科文章用非规范化表演示了这一点:

示例1:

客户
客户 ID |名字 |姓氏 |电话号码
123 | 123罗伯特|英格拉姆 | 555-861-2025
456 | 456简|赖特 | 555-403-1659, 555-776-4100
789 | 789玛丽亚|费尔南德斯 | 555-808-9633

该表是非规范化的,因为 Jane 有一个电话号码是一组。这样写表仍然违反 1NF。

示例2:

客户
客户 ID |名字 |姓氏 |电话号码
123 | 123罗伯特|英格拉姆 | 555-861-2025
456 | 456简|赖特 | 555-403-1659
456 | 456简|赖特 | 555-776-4100
789 | 789玛丽亚|费尔南德斯 | 555-808-9633

标准化表格的正确方法是将其分成两个表格。

示例3:

客户
客户 ID |名字 |姓
123 | 123罗伯特|英格拉姆
456 | 456简|赖特
789 | 789玛丽亚|费尔南德斯

电话
客户 ID |电话号码
123 | 123 555-861-2025
456 | 456 555-403-1659
456 | 456 555-776-4100
789 | 789 555-808-9633

另一种看待 1NF 的方法是由 Chris Date(来自维基百科)定义的:

  1. 行没有从上到下的顺序。
  2. 各列没有从左到右的顺序。
  3. 没有重复的行。
  4. 每个行和列的交集只包含适用域中的一个值(没有其他值)。
  5. 所有列都是常规的[即行没有隐藏组件,例如行 ID、对象 ID 或隐藏时间戳]。

示例 2 缺少唯一键,这违反了规则 3。示例 1 违反了规则 4,因为电话号码包含多个值。

只有示例 3 满足所有这些要求。

进一步阅读:


0
投票

我发现的最简单的解释是从here复制的修改后的定义:

第一范式定义

如果数据库满足以下条件,则该数据库处于第一范式:

1)仅包含原子值

2)没有重复组

© www.soinside.com 2019 - 2024. All rights reserved.