数据库归一化与数据冗余:平衡数据完整性与存储空间
发布时间: 2024-07-03 00:54:43 阅读量: 69 订阅数: 28
供热系统大数据分析与预测.pptx
![数据库归一化与数据冗余:平衡数据完整性与存储空间](https://img-blog.csdnimg.cn/20201006205932621.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2lmdWJpbmc=,size_16,color_FFFFFF,t_70)
# 1. 数据库归一化的概念和原则**
数据库归一化是一种数据组织技术,旨在消除数据冗余并确保数据一致性。冗余是指数据在表中重复出现,而一致性是指数据在整个数据库中保持准确和一致。
归一化遵循以下原则:
* **原子性:**每个数据项都不可再分,代表一个不可分割的最小信息单位。
* **唯一性:**每个数据项都唯一标识一个实体或属性。
* **依赖性:**数据项之间的依赖关系必须是明确且无循环的。
# 2. 归一化理论
### 2.1 第一范式(1NF)
**定义:**
第一范式(1NF)规定,数据库中的每个表都必须满足以下条件:
- 表中的每个列都必须包含原子值,即不可再分解为更小的逻辑单元。
- 表中的每一行都必须唯一标识一个实体。
**优点:**
- 消除重复数据,减少冗余。
- 提高数据一致性,因为每个值只存储一次。
**缺点:**
- 可能导致插入异常,因为某些列可能依赖于其他列。
- 可能降低查询效率,因为需要连接多个表来获取相关数据。
**示例:**
```
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(100) NOT NULL,
Phone VARCHAR(20) NOT NULL,
Email VARCHAR(50) NOT NULL
);
```
这个表符合 1NF,因为每一行都唯一标识一个学生,并且每一列都包含原子值。
### 2.2 第二范式(2NF)
**定义:**
第二范式(2NF)在 1NF 的基础上进一步规定,表中的每一列都必须依赖于表的主键,而不是依赖于表中的其他列。
**优点:**
- 进一步减少冗余,因为每个列都只存储与主键相关的数据。
- 提高数据一致性,因为更新主键不会影响其他列。
**缺点:**
- 可能导致插入异常,因为某些列可能依赖于其他非主键列。
- 可能降低查询效率,因为需要连接多个表来获取相关数据。
**示例:**
```
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
ProductID INT NOT NULL,
Quantity INT NOT NULL,
OrderDate DATE NOT NULL
);
```
这个表符合 2NF,因为每一列都依赖于主键 OrderID。
### 2.3 第三范式(3NF)
**定义:**
第三范式(3NF)在 2NF 的基础上进一步规定,表中的每一列都必须直接依赖于表的主键,而不是间接依赖于其他列。
**优点:**
- 进一步减少冗余,因为每个列都只存储与主键直接相关的数据。
- 提高数据一致性,因为更新主键不会影响其他列。
**缺点:**
- 可能导致插入异常,因为某些列可能依赖于其他非主键列。
- 可能降低查询效率,因为需要连接多个表来获取相关数据。
**示例:**
```
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Address VARCHAR(100) NOT NULL,
Phone VARCHAR(20) NOT NULL
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT NOT NULL,
ProductID INT NOT NULL,
Quanti
```
0
0