数据库三范式是关系数据库设计中的一组规则,用于确保数据库的完整性和数据一致性。三范式包括第一范式 (1NF)、第二范式 (2NF) 和第三范式 (3NF)。
第一范式 (1NF)
1NF 要求数据库表中的每一行数据都是唯一的且不可分割的。例如,下表不是 1NF,因为有些行包含重复的数据:
姓名 | 地址 | 电话 |
---|---|---|
John Smith | 123 Main Street | 555-1212 |
John Smith | 456 Elm Street | 555-1212 |
要使该表符合 1NF,可以将其拆分为两个表:
姓名 | 地址 |
---|---|
John Smith | 123 Main Street |
John Smith | 456 Elm Street |
姓名 | 电话 |
---|---|
John Smith | 555-1212 |
John Smith | 555-1212 |
第二范式 (2NF)
2NF 要求数据库表中的每个非主属性都完全依赖于主键。例如,下表不是 2NF,因为“电话”属性部分依赖于“地址”属性:
姓名 | 地址 | 电话 | 城市 |
---|---|---|---|
John Smith | 123 Main Street | 555-1212 | Anytown |
John Smith | 456 Elm Street | 555-1212 | Anytown |
要使该表符合 2NF,可以将其拆分为两个表:
姓名 | 地址 | 城市 |
---|---|---|
John Smith | 123 Main Street | Anytown |
John Smith | 456 Elm Street | Anytown |
姓名 | 电话 |
---|---|
John Smith | 555-1212 |
John Smith | 555-1212 |
第三范式 (3NF)
3NF 要求数据库表中的每个非主属性都完全依赖于主键,并且不依赖于其他非主属性。例如,下表不是 3NF,因为“城市”属性依赖于“地址”属性:
姓名 | 地址 | 城市 | 邮政编码 |
---|---|---|---|
John Smith | 123 Main Street | Anytown | 12345 |
John Smith | 456 Elm Street | Anytown | 12345 |
要使该表符合 3NF,可以将其拆分为三个表:
姓名 | 地址 |
---|---|
John Smith | 123 Main Street |
John Smith | 456 Elm Street |
地址 | 城市 | 邮政编码 |
---|---|---|
123 Main Street | Anytown | 12345 |
456 Elm Street | Anytown | 12345 |
三范式的优点
遵循三范式的数据库具有以下优点:
- 减少数据冗余
- 提高数据一致性
- 简化数据库维护
- 提高数据库性能
三范式的缺点
遵循三范式的数据库也有一些缺点:
- 可能导致表结构更复杂
- 可能降低查询性能(在某些情况下)
常见问答
- 1NF 的定义是什么?
- 2NF 的定义是什么?
- 3NF 的定义是什么?
- 遵循三范式的优点有哪些?
- 遵循三范式的缺点有哪些?
原创文章,作者:诸葛武凡,如若转载,请注明出处:https://www.wanglitou.cn/article_51756.html