如果实体不包含重复组,那么它满足第一范式。就关系而言,如果表不包含重复列,那么它满足第一范式。重复列会降低数据的灵活性、浪费磁盘空间和导致更难以搜索数据。在以下电话号码簿示例中,
name 表包含重复列 child1、child2 和 child3。
图: 规范化之前的 Name 实体

您可以在当前表中发现一些问题。这个表总是在磁盘上为三个子女记录保留空间,而无论该人员是否有子女。可以记录的最大子女数是 3,但您的一些熟人可能有四个或更多的子女。要查找特定的子女,就必须在每一行中搜索所有三个列。
要消除重复列并使该表满足第一范式,请将该表分为两个表。将重复列放到其中一个表中。两个表之间的关联是通过主键与外键的组合建立的。由于
name 表中不存在关联就不能存在子女,所以可使用外键
rec_num 来引用
name 表。
图: Name 实体达到第一范式

现在,检查
图 1 中的电话号码簿结构,了解有没有不满足第一范式的组。由于认为
b9600、
b14400
和
b28800 列是重复列,所以 name-modem 关系不满足第一范式。向
modem 表添加名为
b_type 的新属性,以包含
b9600、
b14400 和
b28800 出现形式。下图显示按照第一范式进行了规范化的数据模型。
图: 个人电话号码簿的数据模型