当前位置:   article > 正文

【DataBase】数据库三范式【看了就有收获,最简单的例子解释】

数据库三范式

1. 数据库的三范式是什么????

范式=规范,原则上是必须遵循的(但是需求不同可以不遵循),特殊情况可以不遵循

第一范式(1NF):符合数据表的原子性【就是每一个属性不可再分

表中的同一列数据相同

一个列名只能对应一列

并且每一列都不可再分

行的上下关系互不影响(看不懂这里没关系,例子懂了就行

举例:第一个是不满足第一范式的 【是可以再分的】(将签到的两行改成一行就满足一范式了)

 这个例子就是满足一范式的。

第二范式(2NF):消除了非主属性对于【主属性的集合】的部分函数依赖(简单来说:表中的非主属性【姓名】必须完全依赖于主属性【学号】,也就是说通过主属性能够获取到一个唯一的姓名。)

名词解释;

码(候选码):就是主属性的集合。 有了码就可以获取到码对应的其他属性【id【主属性】确定--就可以确定 姓名 系名和系主任 (非主属性)。课名【主属性】可以获取分数【非主属性】】

主属性:码里面的属性就是主属性,包括id,课名。

非主属性:不是主属性的就是非主属性,包括姓名和系名和系班主任,分数。

函数依赖:函数y=f(x)代表给定一个x值,y的值也是确定的。在数据表中,如果属性x确定的情况下,必定能确定Y的值,那么就说Y函数依赖于X 写作X---Y。

比如在表中,给定一个学号,必定能够获取到唯一的一个姓名。那么就说明姓名依赖于函数学号。写作:学号---姓名。

在表中的以来函数还有

学号---系名

学号---系班主任

完全函数依赖:举例说明:(学号、课名)---成绩【成绩【非主属性】依赖于学号和课名【都是主属性】才能获取唯一的成绩】,少任意一个主属性都不能获取唯一的成绩(学生的分数必须依赖于两个主属性【id和课名】才能获取到唯一的成绩【非主属性】)

完全函数依赖表格举例

部分函数依赖:举例说明:姓名【非主属性】只需要通过id【主属性】就可以确定,不需要另一个主属性(课名),这就叫部分函数依赖(姓名部分函数依赖于id和课名(就是姓名并不是需要通过两个主属性才能获取到,姓名只依赖于id))

第三范式(3NF):在二范式的基础上,消除非主属性对于传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合三范式的要求

传递函数依赖:如果Y依赖于X,Z又依赖于Y,那可以说Z依赖于X。

比如:系名依赖于id(学号),系主任依赖于系名,那么系主任传递函数依赖于学号。不满足三范式,那么如何解决呢?将其分为更细的表(从而增删改查一条信息不会对其他表造成很大的影响)

综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,

注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【不用关联查询,直接单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式

================================简化版本=================================

范式就是规范,就是要遵守的原则。一般要遵守有三种范式

1NF(1范式): 设计数据库表的列的时候,这些列唯一,不可拆分列的原子性,其实这种范式可以不用管,关系型数据库默认都满足。

2NF(2范式):表中行是唯一,通常设计一个主键来实现,通过主键就可以查询到对应的信息。

3NF(3范式): 如果一张表的数据能够通过其他表的外键推导出来,不应该单独设计,通过外键的方式关联查询出来。【避免冗余字段

综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,

注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【**变多表查询为单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式**

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/682758
推荐阅读
相关标签
  

闽ICP备14008679号