我们在建立数据库的时候,要遵循一定的规则。而这就涉及到了三大范式。
这里就不导入概念了,主要是加上我的理解。
第一范式:每个字段都不可再分,是最小的单位。
比如说一个字段是地址。而需要填入省份、市级、区级或县、详细地址。那么地址就不能作为一个字段而出现。因为它还需要细分成省份、市级、区级或县、详细地址四个部分。
举例:比如学校收集学生信息
学号 | 姓名 | 性别 | 年龄 | 地址 |
230228 | 小明 | 男 | 14 | 河北省保定市莲池区五四路 |
230311 | 小花 | 女 | 15 | 河北省衡水市武邑县翻斗花园 |
像上面那种就是不对的。地址还可以细分。
第二范式:每个字段都与主键相关(前提是满足第一范式)
注意是每个字段都和主键整体相关,而不是主键部分。为什么要说部分。因为这一般针对联合主键。
所以在一张表中不可能保存多种数据。
比如要设计一个订单表。
订单编号 | 商品编号 | 商品名称 | 商品数量 | 商品价格 | 订单时间 |
2303011 | 12357 | 铅笔 | 200 | 5 | 20230301 |
2303011 | 12469 | 钢笔 | 300 | 13 | 20230301 |
2303012 | 12357 | 铅笔 | 100 | 5 | 20230228 |
看到上表可知,同一订单表中有多种数据,所以主键是订单编号和商品编号。是联合主键。
商品名称、商品数量、商品价格都和订单编号和商品编号相关。但是订单时间与订单编号相关,订单时间与商品编号不相关。
第三范式:每个字段都和主键直接相关,而不是间接相关。(前提是满足第一、第二范式)
比如在设计一个订单表时,可以将客户编号设置成一个外键与订单表建立关系,而不是在订单表中将客户的信息填写上去。
订单编号 | 订单项目 | 负责人 | 订单数量 | 订单总额 | 客户编号 |
12345 | 洗衣机 | 小涵 | 2 | 2200 | 3 |
12367 | 电脑 | 小虎 | 50 | 150000 | 7 |
客户编号 | 客户姓名 | 地址 | 联系方式 |
3 | 小天 | 翻斗花园1号楼323 | 146436346326 |
7 | 小张 | 强盛集团附属学校办公楼 | 465734632 |
这样做是为了减少数据的冗余。避免每次做一个订单时把客户信息再加载一遍。可以通过客户编号直接查询客户信息。