赞
踩
范式=规范,原则上是必须遵循的(但是需求不同可以不遵循),特殊情况可以不遵循
表中的同一列数据相同
一个列名只能对应一列
并且每一列都不可再分
行的上下关系互不影响(看不懂这里没关系,例子懂了就行)
举例:第一个是不满足第一范式的 【是可以再分的】(将签到的两行改成一行就满足一范式了)
这个例子就是满足一范式的。
码(候选码):就是主属性的集合。 有了码就可以获取到码对应的其他属性【id【主属性】确定--就可以确定 姓名 系名和系主任 (非主属性)。课名【主属性】可以获取分数【非主属性】】
主属性:码里面的属性就是主属性,包括id,课名。
非主属性:不是主属性的就是非主属性,包括姓名和系名和系班主任,分数。
函数依赖:函数y=f(x)代表给定一个x值,y的值也是确定的。在数据表中,如果属性x确定的情况下,必定能确定Y的值,那么就说Y函数依赖于X 写作X---Y。
比如在表中,给定一个学号,必定能够获取到唯一的一个姓名。那么就说明姓名依赖于函数学号。写作:学号---姓名。
在表中的以来函数还有
学号---系名
学号---系班主任
完全函数依赖:举例说明:(学号、课名)---成绩【成绩【非主属性】依赖于学号和课名【都是主属性】才能获取唯一的成绩】,少任意一个主属性都不能获取唯一的成绩(学生的分数必须依赖于两个主属性【id和课名】才能获取到唯一的成绩【非主属性】)
完全函数依赖表格举例:
部分函数依赖:举例说明:姓名【非主属性】只需要通过id【主属性】就可以确定,不需要另一个主属性(课名),这就叫部分函数依赖(姓名部分函数依赖于id和课名(就是姓名并不是需要通过两个主属性才能获取到,姓名只依赖于id))
传递函数依赖:如果Y依赖于X,Z又依赖于Y,那可以说Z依赖于X。
比如:系名依赖于id(学号),系主任依赖于系名,那么系主任传递函数依赖于学号。不满足三范式,那么如何解决呢?将其分为更细的表(从而增删改查一条信息不会对其他表造成很大的影响)
综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,
注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【不用关联查询,直接单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式
================================简化版本=================================
范式就是规范,就是要遵守的原则。一般要遵守有三种范式
1NF(1范式): 设计数据库表的列的时候,这些列唯一,不可拆分。 列的原子性,其实这种范式可以不用管,关系型数据库默认都满足。
2NF(2范式):表中行是唯一,通常设计一个主键来实现,通过主键就可以查询到对应的信息。
3NF(3范式): 如果一张表的数据能够通过其他表的外键推导出来,不应该单独设计,通过外键的方式关联查询出来。【避免冗余字段】
综合下来:可以发现三个范式,就是将表中的数据拆分成对应的更细的表【增删改查一个不会对其他的所有表的数据造成影响】,
注意:原则上是不能违反三范式的,但是有的时候我们为了增强查询效率【**变多表查询为单表查询】,会设计一些冗余字段,变多表查询为单表查询。称之为反三范式**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。