数据库规范化是一种高效地组织数据库中的数据,以消除冗余数据并确保数据依赖关系正确的过程。使用各种规范化形式可以消除或减少数据库表中的数据冗余。
什么是第一范式(1NF)
第一范式(1NF)
为数据库中的数据组织设置了基本规则。如果数据库满足以下条件,则称为第一范式:
- 规则1(原子值) - 表的每一列只包含原子值。原子值是不能再分的值。
- 规则2(无重复组) - 没有重复的数据组。这意味着表不应包含重复的列。
在设计数据库表时,你必须确保至少满足第一范式的要求,否则在数据库操作过程中会遇到大问题。
1、规则1 – 原子值
表的每一列应只包含原子值。原子值是不能再分的值。
考虑以下用于存储客户数据的CUSTOMERS表:
ID | Name | Age | Salary | City | Country |
---|---|---|---|---|---|
1 | Ramesh | 32 | 2000.00 | Hyderabad, Delhi | India |
2 | Mukesh | 40 | 5000.00 | New York | USA |
3 | Sumit | 45 | 4500.00 | Muscat | Oman |
4 | Kaushik | 25 | 2500.00 | Kolkata | India |
这个表不符合第一正则形式,因为 City 列可以包含多个值。例如,第一行包括值“Hyderabad”和“Delhi”。
现在要将此表转换为第一正则形式,我们必须考虑实际问题,即客户可能住在不同的城市,这些城市可能在同一个或不同的国家。因此,我们将表拆分为两个单独的表如下:
CUSTOMERS表:
ID | Name | Age | Salary |
---|---|---|---|
1 | Ramesh | 32 | 2000.00 |
2 | Mukesh | 40 | 5000.00 |
3 | Sumit | 45 | 4500.00 |
4 | Kaushik | 25 | 2500.00 |
客户地址表:
ID | City | Country |
---|---|---|
1 | Hyderabad | India |
1 | Delhi | India |
2 | New York | USA |
3 | Muscat | Oman |
4 | Kolkata | India |
2、规则2-不允许重复组
数据中没有重复的组。这意味着一个表不应该包含重复的列。
考虑以下正在用于存储客户数据的CUSTOMERS表 –
ID | Name | Age | Salary | City1 | City2 | Country |
---|---|---|---|---|---|---|
1 | Ramesh | 32 | 2000.00 | Hyderabad | Delhi | India |
2 | Mukesh | 40 | 5000.00 | New York | USA | |
3 | Sumit | 45 | 4500.00 | Muscat | Oman | |
4 | Kaushik | 25 | 2500.00 | Kolkata | India |
这个表格不符合第一范式,因为我们有 City 列重复了两次,并且在当前表格中存在一些问题。无论人们是否在两个城市中停留,这个表格始终会在硬盘上保留两个城市的空间。
为了消除重复列并将表格转换为第一范式,将表格分成两个表格。 将重复列放入下面的一个表格中-
CUSTOMERS表格:
ID | Name | Age | Salary |
---|---|---|---|
1 | Ramesh | 32 | 2000.00 |
2 | Mukesh | 40 | 5000.00 |
3 | Sumit | 45 | 4500.00 |
4 | Kaushik | 25 | 2500.00 |
客户地址表:
ID | City | Country |
---|---|---|
1 | Hyderabad | India |
1 | Delhi | India |
2 | New York | USA |
3 | Muscat | Oman |
4 | Kolkata | India |
现在我们有了符合第一范式的标准化表,现在我们可以为同一个客户分配多个城市而不浪费空间。