【发布时间】:2014-05-11 19:53:13
【问题描述】:
当我试图在谷歌中寻找 1NF 的定义时,我发现它很模糊。
像this one 这样的一些网站说,当表格没有任何重复的列集时,表格是第一范式。
其他一些人(大多数人)说同一列中不应存在同一域的多个值。
他们中的一些人说,所有表都应该有一个主键,但有些人根本不谈论主键!
谁能帮我解释一下?
【问题讨论】:
标签: database database-normalization
当我试图在谷歌中寻找 1NF 的定义时,我发现它很模糊。
像this one 这样的一些网站说,当表格没有任何重复的列集时,表格是第一范式。
其他一些人(大多数人)说同一列中不应存在同一域的多个值。
他们中的一些人说,所有表都应该有一个主键,但有些人根本不谈论主键!
谁能帮我解释一下?
【问题讨论】:
标签: database database-normalization
如果关系具有以下属性,即其域中没有元素本身是集合,则该关系处于第一范式。
来自 E. F. Codd(1972 年 10 月)。 《数据库关系模型的进一步规范化》
这真的归结为它是关于什么的,但是invented the relational database model的那个人。
当某事物处于第一范式时,没有列本身包含数据集。
first normal form 上的维基百科文章通过非规范化表演示了这一点:
示例 1:
顾客 客户编号 |名字 |姓氏 |电话号码 123 |罗伯特 |英格拉姆 | 555-861-2025 第456章简 |赖特 | 555-403-1659、555-776-4100 第789章玛丽亚 |费尔南德斯 | 555-808-9633这个表是非规范化的,因为 Jane 有一个电话号码是一个集合。因此写表仍然违反 1NF。
示例2:
顾客 客户编号 |名字 |姓氏 |电话号码 123 |罗伯特 |英格拉姆 | 555-861-2025 第456章简 |赖特 | 555-403-1659 第456章简 |赖特 | 555-776-4100 第789章玛丽亚 |费尔南德斯 | 555-808-9633规范化表格的正确方法是将其分成两个表格。
示例 3:
顾客 客户编号 |名字 |姓 123 |罗伯特 |英格拉姆 第456章简 |赖特 第789章玛丽亚 |费尔南德斯 电话 客户编号 |电话号码 123 | 555-861-2025 第456章555-403-1659 第456章555-776-4100 第789章555-808-9633另一种看待 1NF 的方式是由 Chris Date(来自 Wikipedia)定义的:
Example2 缺少唯一键,这违反了规则 3。Example1 违反了规则 4,因为电话号码包含多个值。
只有 Example3 满足所有这些要求。
进一步阅读:
【讨论】:
【讨论】: