第一范式 (1NF)



数据库规范化是有效组织数据库中数据的过程,目的是消除数据库中的冗余数据并确保数据依赖关系合理。各种规范化形式用于消除或减少数据库表中的数据冗余。

什么是第一范式 (1NF)?

第一范式 (1NF) 设置了组织数据库中数据的基本规则。如果一个数据库满足以下条件,则称其处于第一范式:

  • 规则 1(原子值) - 表的每一列都应只包含原子值。原子值是不能进一步细分的 值。

  • 规则 2(无重复组) - 没有重复的数据组。这意味着表不应包含重复的列。

在设计数据库表时,您必须注意至少符合第一范式,否则在数据库操作过程中会遇到很大的问题。

规则 1 - 原子值

表的每一列都应只包含原子值。原子值是不能进一步细分的 值。

考虑以下用于存储客户数据的 CUSTOMERS 表:

ID 姓名 年龄 薪资 城市 国家
1 Ramesh 32 2000.00 Hyderabad, Delhi 印度
2 Mukesh 40 5000.00 纽约 美国
3 Sumit 45 4500.00 马斯喀特 阿曼
4 Kaushik 25 2500.00 加尔各答 印度

此表不处于第一范式,因为城市列可以包含多个值。例如,第一行包含值“海得拉巴”和“德里”。

现在,为了使此表达到第一范式,我们必须考虑一个实际问题,即客户可以居住在不同的城市,这些城市可能在同一个国家或不同的国家。因此,我们将表拆分为两个单独的表,如下所示:

CUSTOMERS 表

ID 姓名 年龄 薪资
1 Ramesh 32 2000.00
2 Mukesh 40 5000.00
3 Sumit 45 4500.00
4 Kaushik 25 2500.00

CUSTOMERS_ADDRESS 表

ID 城市 国家
1 海得拉巴 印度
1 德里 印度
2 纽约 美国
3 马斯喀特 阿曼
4 加尔各答 印度

规则 2 - 无重复组

没有重复的数据组。这意味着表不应包含重复的列。

考虑以下用于存储客户数据的 CUSTOMERS 表:

ID 姓名 年龄 薪资 城市1 城市2 国家
1 Ramesh 32 2000.00 海得拉巴 德里 印度
2 Mukesh 40 5000.00 纽约 美国
3 Sumit 45 4500.00 马斯喀特 阿曼
4 Kaushik 25 2500.00 加尔各答 印度

此表不处于第一范式,因为我们重复了城市列两次,并且您可以在当前表中看到一些问题。此表始终在磁盘上为两个城市保留空间,无论该人是否居住在两个城市。

为了消除重复的列并将表转换为第一范式,请将表拆分为两个表。将重复的列放入其中一个表中,如下所示:

CUSTOMERS 表

ID 姓名 年龄 薪资
1 Ramesh 32 2000.00
2 Mukesh 40 5000.00
3 Sumit 45 4500.00
4 Kaushik 25 2500.00

CUSTOMERS_ADDRESS 表

ID 城市 国家
1 海得拉巴 印度
1 德里 印度
2 纽约 美国
3 马斯喀特 阿曼
4 加尔各答 印度

现在我们已经规范化了表,这些表满足处于第一范式的要求,现在我们可以为同一个客户分配多个城市而不会浪费空间。

广告