数据库的设计范式

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

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

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

第一范式

1NF 属性的原子性

举个例子:

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

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

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

第二范式

2NF 实体唯一性

同样也是来个例子:

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

​ 问题:

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

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

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

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

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

Course(课程号 学分  )

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

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

第三范式

3NF 不存在传递依赖

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

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

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

正确的做法 是   

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

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

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

再举另外一个例子说明:

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

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

范式和非范式的区别:

范式 

减少数据的冗余 

更新 快  表 体积小 

范式 比反范式 更新起来快 

缺点:

​ 查询  表关联 

​ 索引优化 难度 大 

反范式

减少表关联   

索引优化 比 范式优化方便 

缺点

数据冗余   

更新数据 成本大       

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

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

你可能感兴趣的:(数据库的设计范式)