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数据库设计总结
一对多:两张表,关系表加外键
多对多:三张表,关系表两外键
一对一:实际开发中,一张表的字段太多,这个时候需要拆分表
技巧:一对一,外键唯一
设计表格的最终目的都是为了满足客户需求,有时会拿冗余换速度,这是因为表之间的连接越多,效率越低(笛卡尔积现象),因此有时候表格数据存在冗余,但是为了提升效率,一定的冗余也是合理的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!