当我试图在谷歌中查找 1NF 的定义时,我发现它很模糊。
一些网站(例如thisone)表示,当表格没有任何重复的列集时,该表格处于第一范式。
其他一些人(大多数)说同一列中不应该存在同一域的多个值。
他们中的一些人说,所有表都应该有主键,但其他一些人根本不谈论主键!
有人可以帮我解释一下吗?
如果一个关系具有以下属性:其域中都不包含本身为集合的元素,则该关系处于第一范式。
来自 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(来自维基百科)定义的:
示例 2 缺少唯一键,这违反了规则 3。示例 1 违反了规则 4,因为电话号码包含多个值。
只有示例 3 满足所有这些要求。
进一步阅读: