三范式(Third Normal Form,3NF)是关系数据库设计中的一个基本概念,用于规范化数据库表格,以减少
数据冗余并确保数据的一致性。三范式是正规化(Normalization)过程的一个阶段,它包括一组规则,确保表格中的数据存储在最小化的冗余状态下
第一范式(1NF):
1NF是正规化的第一步。在1NF中,表格中的每个列都包含原子性的值,也就是每列中的每个单元格只包含一个不可分割的数据项。这意味着表格中的每个列都不包含重复的、多个值的列表或集合。
例如,以下表格不符合1NF
StudentID | Courses |
---|---|
1 | Math, Physics |
2 | Chemistry, Math |
在1NF中,应将表格拆分为两个表格,一个存储学生信息,另一个存储课程信息,如下:
学生表格(Students):
StudentID | StudentName |
---|---|
1 | Alice |
2 | Bob |
课程表格(Courses):
StudentID | Course |
---|---|
1 | Math |
1 | Physics |
2 | Chemistry |
2 | Math |
现在,每个表格都符合1NF,每个列都包含原子性的值。
第二范式(2NF):
在1NF的基础上,2NF要求每个非主键列都完全依赖于候选键(主键)列。这意味着,如果表格的候选键有多个列组成,那么每个非主键列都必须依赖于所有候选键列,而不是部分依赖。
例如,考虑以下表格:
订单表格(Orders):
OrderID | CustomerID | Product | Price |
---|---|---|---|
1 | 101 | Laptop | 800 |
2 | 102 | Smartphone | 500 |
3 | 101 | Tablet | 300 |
在这个表格中,候选键是{OrderID},但产品(Product)和价格(Price)列部分依赖于候选键(CustomerID)。为了符合2NF,应该将表格拆分为两个表格,一个存储订单信息,另一个存储产品信息:
订单表格(Orders):
OrderID | CustomerID |
---|---|
1 | 101 |
2 | 102 |
3 | 101 |
产品表格(Products):
OrderID | Product | Price |
---|---|---|
1 | Laptop | 800 |
2 | Smartphone | 500 |
3 | Tablet | 300 |
现在,每个表格都符合2NF,每个非主键列完全依赖于候选键。
第三范式(3NF):
在2NF的基础上,3NF要求非主键列之间没有传递依赖关系。换句话说,任何非主键列都不应该依赖于其他非主键列。
例如,考虑以下表格:
雇员表格(Employees):
EmployeeID | EmployeeName | Department | ManagerName |
---|---|---|---|
1 | Alice | HR | Bob |
2 | Bob | HR | Carol |
3 | Carol | Finance | NULL |
在这个表格中,ManagerName列依赖于EmployeeName列,形成了传递依赖。为了符合3NF,应将表格拆分为两个表格,一个存储员工信息,另一个存储部门信息:
员工表格(Employees):
EmployeeID | EmployeeName | DepartmentID |
---|---|---|
1 | Alice | 1 |
2 | Bob | 1 |
3 | Carol | 2 |
部门表格(Departments):
DepartmentID | DepartmentName |
---|---|
1 | HR |
2 | Finance |
现在,每个表格都符合3NF,没有传递依赖关系存在。
总结:
-
第一范式(1NF)要求每列包含原子性的值。
-
第二范式(2NF)要求非主键列完全依赖于候选键。
-
第三范