数据库设计之三大范式

数据库设计和软件设计一样,都需要遵守一定的规范,这样才能有效去除冗余信息并设计出结构清晰,关系合理的数据库,同时还能防止发生插入,删除和更新(INSERT, DELETE, UPDATE)操作异常。作为一个专业的程序猿,必须要牢牢掌握数据库设计的三大范式。

三大范式

第一范式(1NF)

数据表中的每一个字段都必须是不可拆分的最小单元,确保每一个字段的原子性。

比如下面的表格:

工号姓名年龄地址
z00001张三25广东省佛山市大沥镇永平村三组4号
l00002李四33陕西省西安市南二环中段长安大学
w00003王麻子34四川省成都市武侯区浆洗街6号

上面表格不满足1NF,因为其地址字段还能拆分为省,市,区,街道,所以满足1NF的表格应该为:

工号姓名年龄街道
z00001张三25广东省佛山市海珠区大沥镇永平村三组4号
l00002李四33陕西省西安市新城区南二环中段长安大学
w00003王麻子34四川省成都市武侯区浆洗街6号

这样做的好处是方便筛选,查询以及后续扩展。

第二范式(2NF)

首先必须满足1NF,然后表中的所有字段,都必须完全依赖于主键,而不能有任何一列与主键没有关系,确保一张表只描述一件事情。

举例说明:

工号姓名年龄客户编号客户名称
z00001张三25C0001华为
l00002李四33C0002腾讯
w00003王麻子34C0003阿里巴巴

上面表格满足1NF但是不满足2NF,因为客户编号和客户名称并不依赖于工号这个主键,所以表格需要分别拆分为

员工表:

工号姓名年龄
z00001张三25
l00002李四33
w00003王麻子34

客户表:

客户编号客户名称
C0001华为
C0002腾讯
C0003阿里巴巴

拆分后保证了每一张表至描述了一件事情,表格结构更加清晰。

第三范式(3NF)

在满足2NF的基础上,表中的每一个字段只与主键直接相关而不是间接相关,即表中的每一个字段只能直接依赖于主键。

举例说明:

工号姓名年龄部门电话所在部门
z00001张三25010-2123123人事部
l00002李四33010-2009889公共关系部
w00003王麻子34010-2009889公共关系部

上面表格满足2NF但是不满足3NF,因为存在 “部门电话” 依赖于 “所在部门”, 而 “所在部门” 依赖于 “工号” 这种传递依赖关系, “部门电话” 字段并不直接依赖于工号这个主键,所以需要把这张表拆分成两张表,并用外键(部门编号)来描述这种多对一的关系,分别拆分为

员工表:

工号姓名年龄所在部门
z00001张三25B01
l00002李四33B02
w00003王麻子34B02

部门表:

部门编号部门名称部门电话
B01人事部010-2123123
B02公共关系部010-2009889

拆分后有效的消除了冗余的部门信息,表格结构更加清晰。

总结

第一范式:表中的每一个字段能不能再细分。(字段原子性)
第二范式:表能不能拆分成互相独立的多个表。(每个表至描述一种东西)
第三范式:已经分成的多个表如果有关联,那么在一张表中只能存在另外一张关联表的主键。(通过外键来查询信息)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值