MySQL笔记九:数据库三范式

第一范式:要求任何 一张表必须有主键,每一个字段原子性不可再分
第二范式:在第一范式的基础上,要求所有非主键字段完全依赖主键,不要产生部分依赖
第三范式:在第二范式的基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
 
9.1第一范式
最核心最重要,所有的表的设计都要满足
原子性不可再分:比如联系方式(包括邮箱+电话)就是原子性可分的,把它拆成两个字段才是原子性不可分
 
9.2第二范式
学生编号+老师编号(pk)   学生姓名    老师姓名
1001            001                    张三            王老师
1002            002                    李四            赵老师
1003           001                      王五            王老师
1003            002                      王五            赵老师
满足第一范式,但是不满足第二范式,因为多对多关系中字段之间有部分依赖,数据冗余了,那么怎么修改才能满足第二范式?
技巧:多对多,三张表、关系表两外键
将一张表拆分成三张表:学生表、老师表、学生老师关系表
学生老师关系表
id(pk)        学生编号        老师编号
1                1001                001
2                1002                002
3                1003                001
4                1003                002
 
9.3第三范式
一对多关系满足第一范式和第二范式,但不满足第三范式
技巧:一对多,两张表,关系表加外键
 
9.4数据库设计总结
一对多:两张表,关系表加外键
多对多:三张表,关系表两外键
一对一:实际开发中,一张表的字段太多,这个时候需要拆分表
技巧:一对一,外键唯一
设计表格的最终目的都是为了满足客户需求,有时会拿冗余换速度,这是因为表之间的连接越多,效率越低(笛卡尔积现象),因此有时候表格数据存在冗余,但是为了提升效率,一定的冗余也是合理的
posted @   盛夏小叮当  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示