三大范式
1. 什么是范式:
NF:Normal form
1.1 理解:
范式是设计数据库表结构时需要遵守的规则。一般情况下,遵守前三个范式,设计出的表结构就是合理的。若设计的表结构违反了前三个范式任意之一,表结构一定不合理。
1.2 概念:
设计关系数据库表结构时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小
1.3 三大范式(记忆-重要)
- 1NF是指所有列必须是原子性的
- 2NF是指非主属性必须完全依赖候选码
- 3NF是指非主属性不能依赖于其他非主属性
1.4 杂项(关于外键)
1.4.1 物理外键
外键概念:一个表中非主属性是其他表的主键。
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。不能有重复的,不允许为空
问题:删除数据时由于存在外键约束(数据库定义,很强烈)可能出现问题。
1.4.2 逻辑外键
用业务代码而不是数据库的强烈约束来实现。
2.种类
有六种
2.1 第一范式
1NF
数据库表中的列都是原子性的。
如果一个关系模型R(U)的所有属性都是不可再分的基本数据项,则称R(U)为第一范式
2.2 第二范式
2NF
在1NF的基础上,非码属性必须完全依赖候选码(在1NF的基础上消除非主属性(非候选键)对主码的部分函数依赖)
候选码(候选键):在表中可以用于唯一的标识一条记录,作为主键的候选存在
非主属性:非候选码
示例:设计订单表
user_id | user_name | good_id | good_name | price | count |
1 | XX | 2 | XX | 12 | 2 |
2 | XX | 5 | XX | 15 | 5 |
user_id+good_id 形成候选码
非主属性:user_name,good_name,price,count
但是user_name依赖于user_id,而good_name,price,count依赖于good_id。
出现了非主属性部分依赖于候选码(违反了第二范式)
合理的设计:
id | order_code | user_id | good_id | count | total_price |
候选码:id,order_code,user_id+good_id
非主属性:count,total_price
非主属性完全依赖候选码,符合第二范式
2.3 第三范式
3NF
在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖)
示例:设计员工表
id | emp_name | dept_id | dept_name |
候选码:id
非主属性:emp_name,dept_id,dept_name
emp_name,dept_id依赖于id
dept_name依赖于dept_id(违反第三范式)
合理设计:
id | emp_name | dept_id |
dept表
id | dept_name | dept_desc |
2.4 巴斯-科德范式
BCNF
2.5 第四范式
4NF
2.6 第五范式
5NF,又称为完美范式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)