第一范式:确保每列的原子性
比如数据库中有地址字段:
custID | Address |
1 | 中国北京市 |
2 | 美国纽约市 |
上表明显不符合数据库的第一范式,因为地址栏还可以分割,改为满足第一范式的样子:
custID | country | city |
1 | 中国 | 北京市 |
2 | 中国 | 武汉市 |
3 | 美国 | 纽约市 |
第二范式:每个表只描述一件事情
客人入住酒店的表实例:
字段 | 例子 |
客人编号 | c001 |
客人姓名 | 王五 |
客房号 | 001 |
客房状态 | 入住 |
床位数 | 2 |
价格 | ¥199 |
上表就描述了两件事情客人和客房,很显然并不符合数据库的第二范式。下面改为符合第二范(即改成两张表):
字段 | 例子 |
客人编号 | c001 |
客人姓名 | 王五 |
字段 | 例子 |
客房号 | 001 |
客房状态 | 入住 |
床位数 | 2 |
价格 | ¥199 |
第三范式:如果一个关系满足2NF,并且出了主键外的其他列不传递依赖于主键,则满足第三范式。(除主键外,每列和主键是直接的关系,而不是间接的关系)
实例:
字段 | 例子 |
客房号 | 001 |
客房状态 | 入住 |
床位数 | 2 |
价格 | ¥199 |
上面的客房状态显然是可以不是直接依赖,可以改为:
字段 | 例子 |
客房状态编号 | 001 |
客房状态名称 | 入住 |
字段 | 例子 |
客房状态编号 | 002 |
客房状态名称 | 空闲 |
以上就是本人对数据库三大范式的理解
還可以查看https://blog.csdn.net/weixin_43901865/article/details/112725315