美文网首页
数据库的设计范式

数据库的设计范式

作者: RwatitFahsa | 来源:发表于2019-01-20 15:09 被阅读4次

    我们都知道在建立数据表中需要遵循一定的规则,在运用关系型数据库中的这种规则就称为范式,所以要建立合理的数据表就需要遵循这些规则。

    首先先来说说数据库设计中存在哪些设计范式:最多使用的是3NF,除此之外还有针对多值依赖的第四范式,连接依赖的第五范式,DK范式和第六范式。

    好了,废话不多说了,今天重点介绍下数据库设计中的三大范式:

    第一范式

    1NF 属性的原子性

    举个例子:

    ID  学号  姓名  地址  出生年月日    这个还可以 将 地址 和  出生年月日进行拆分  不符合第一范式 

    ID  学号  姓名  省份 市区 县区    年 月  日    字段不能再拆分    这就是符合第一范式   

    第一范式作为数据库中最基本的范式,要求数据表中所有的字段都是不可分割的基本数据项,也就是原子性的特征,比如上例中的地址可以再拆分为 省 市 县区。

    第二范式

    2NF 实体唯一性

    同样也是来个例子:

    学号  课程号  姓名  学分      这里边  学号 依赖于姓名    学分 依赖于 课程号 

    ​ 问题:

    ​ 1.每行会存在相同信息 

    ​ 2.删除 成绩容易把课程信息干掉

    3.如果学生没选课程  数据库中就不存在该学生的姓名 

    ​ 4.调整学分  所有的行都得更新 

    正确的做法  Student (学号  姓名)

    Course(课程号 学分  )

    ​       选课表(学号  课程号  成绩  )

    第二范式首先遵循 第一范式    记录要有唯一的标识 实体唯一性  不存在部分依赖。也就是说一个数据库表中,一个表只能保存一种数据,不能将同一种数据保存在同一张表中

    第三范式

    3NF 不存在传递依赖

    哈哈,还是以例子来说明吧:

    学号  姓名  年龄  学院  学院电话 

      学号 ->学生姓名  ->所在学院 ->学院电话 

    正确的做法 是   

    ​ 学生 (学号 姓名  年龄 所在学院)

    ​ 学院  (学院名称  学院电话)

    第三范式就是任何字段不能由其他字段派生出来 也就是说 不存在传递依赖

    再举另外一个例子说明:

    比如在设计一张订单数据表的时候,可以将商品的编号和订单的编号建立相应的关系,而不是将商品的信息和订单的信息放在同一张表中进行存储。

    当然可以进行反范式的设计:为了提高查询  更新效率  可以适当增加冗余字段 以 空间  换时间

    范式和非范式的区别:

    范式 

    减少数据的冗余 

    更新 快  表 体积小 

    范式 比反范式 更新起来快 

    缺点:

    ​ 查询  表关联 

    ​ 索引优化 难度 大 

    反范式

    减少表关联   

    索引优化 比 范式优化方便 

    缺点

    数据冗余   

    更新数据 成本大       

    如果 表  读的多  适当反范式设计    以空间 换时间    如果更新的 多  那么 遵循第三范式     

    从性能上讲,范式有更好的写性能,饭范式有更好的读性能。

    相关文章

      网友评论

          本文标题:数据库的设计范式

          本文链接:https://www.haomeiwen.com/subject/mxvxjqtx.html