4、数据库设计三范式
4.1、数据库设计范式
4.2、数据库设计范式
3个
第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分
第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。
第三范式:建立在第二范式的基础上,要求所有非主键字段直接依赖主键,不要产生传递依赖
声明:三范式是面试官常问
设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,空间的浪费
4.3、第一范式
最核心,最重要的范式,所有表的设计都需要满足
必须有主键,每一个字段原子性不可再分
不满足第一范式,第一:没有主键。第二:联系方式可以分为邮箱地址和电话
4.4、第二范式
建立在第一范式的基础之上
要求所有非主键字段完全依赖主键,不要产生部分依赖。
不满足第一范式
学生编号 教师编号,两个字段联合做主键,复合主键(PK:学生编号+教师编号)
经过修改后满足第一范式,不满足第二范式,张三依赖1001,王老师依赖001,是部分依赖
产生部分依赖的缺点:数据冗余,空间浪费
为了让以上表满足第二范式,需要这样设计:
使用三张表表示多对多关系!!
学生表
学生编号(pk) 学生名字
-----------------------------------------------------------------------
1001 张三
1002 李四
1003 王五
教师表
教师编号(pk) 教师姓名
---------------------------------------------------------------------
001 王老师
002 赵老师
学生教师关系表
id(pk) 学生编号(fk) 教师编号(fk)
------------------------------------------------------------------------------------------------------
1 1001 001
2 1002 002
3 1003 001
4 1001 002
背口诀:多对多,三张表,关系表两个外键(重要)
4.5、第三范式
建立在第二范式的基础上
要求所有非主键字段直接依赖主键,不要产生传递依赖
一对多关系一个教室多个学生
满足第一范式:有主键
满足第二范式:因为主键不是复合主键,没有产生部分依赖。主键是单一主键
一年一班依赖01 01依赖1001 产生了传递依赖
不符合第三范式要求:产生数据冗余
背口诀:一对多,两张表,多的表加外键!!!
标签:教师,依赖,范式,数据库,面试,编号,主键,1001 来源: https://www.cnblogs.com/doremi429/p/15837362.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。