ToB企服应用市场:ToB评测及商务社交产业平台

标题: 数据库的三大范式 [打印本页]

作者: 熊熊出没    时间: 2022-6-24 12:31
标题: 数据库的三大范式




文章是看尚硅谷的MySQL所写的笔记
1.为什么需要数据库设计

设计数据表的时候,要考虑很多的问题:

如果数据库设计得不合理的话,可能导致下面的几种问题:

我们可以看出设计良好的数据库是很重要的,它有下面的优点:

设计数据库,我们得重视数据表的设计,为了建立冗余度小,结构合理的数据库,设计数据库必须遵循一定的规则。
2.范式(Normal Formal)

2.1范式概述

关系型数据库中,关于数据表设计的基本原则,规则就称为范式,范式是我们在设计数据库结构过程中需要遵循的规则和指导方法。

不过,有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。

2.2键和相关属性的概念

范式的定义会用到主键和候选键,我们先来看看相关的概念,数据库中的键是由一个或多个属性组成的,我们来看一下数据表中常用的几种键和属性的定义。


2.3第一范式(1NF)


2.4第二范式(2NF)


   比如说,在成绩表(学号,课程号,成绩)关系中,(学号,课程号)可以决定成绩,因为一个学生可以选多门课,一门课也可以被多个学生选择,所以学号或课程号都不能单独决定成绩。
所以(学号,课程号)——>成绩就是完全依赖关系。

    比赛表里面包含球员编号,姓名,年龄,比赛编号,比赛实际和比赛场地等属性,候选键和主键都是(球员编号,比赛编号),我们可以通过候选键(主键)来决定下面的关系。
(球员编号,比赛编号)——>(姓名,年龄,比赛时间,比赛场地,得分)
但是这个数据表不满足第二范式,因为数据表中的字段之间还存在下面的对应关系:

(球员编号)——>(姓名,年龄)
(比赛编号)——>(比赛时间,比赛场地)
非主属性并非完全依赖候选键,这样会产生下面的问题。

  
为了避免上述情况,我们可以把球员比赛表设计成下面的三张表。
          表名             属性(字段)    球员player表         球员编号,姓名,年龄等属性    比赛game表         比赛编号,比赛时间,比赛场地等属性    球员比赛关系player_game表         球员编号,比赛编号,得分等属性    这样的话,每张数据表都符合第二范式,就避免了异常情况的发生
第二范式要求实体的属性完全依赖主关键字,如果存在不完全依赖,那么这个属性和主关键字的这一部分就应该分离处理形成一个新的实体,新实体和原来实体之间是一对多的关系
2.5第三范式(3NF)




2.6范式的优缺点


3.反范式化

3.1概述


3.2 反范式的新问题

反范式虽然可以通过空间换实际,提升查询的效率,但是反范式也会带来一些新问题

3.3反范式的适用场景

当冗余信息能大幅度提高查询效率的时候,我们才会采取反范式的优化。
   增加冗余字段的建议
增加冗余冗余字段一定要符合下面的两个条件,满足下面的两个条件才可以考虑增加冗余字段
①这个冗余字段不需要经常进行修改
②这个冗余字段查询的时候不可或缺

  4.BCNF(巴斯范式)




这个表符合第三范式



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4