Java教程

数据库设计三范式(重要,面试)

本文主要是介绍数据库设计三范式(重要,面试),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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 产生了传递依赖

    不符合第三范式要求:产生数据冗余

    

 

     背口诀:一对多,两张表,多的表加外键!!!

 

     

这篇关于数据库设计三范式(重要,面试)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!