在学习数据库系统概念课程的时候,对于范式这章节学习的不深入,所以到现在对范式的概念还是很模糊。
使用范式的目的在于生成一组关系模式,是的存储信息是避免不必要的冗余,可以方便的获取信息。
数据库有多种范式,教材讲义上只提到了几种。
* 后期继续学习
元组(Tuple):是一行记录。
码(Key):包括主码、候选码以及超码。码的指定代表了被建模的事物在现实世界中的约束。
超码(Super Key):是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。
候选码(Candidate Key):是一个最小超码。如果K是一个超码,那么K的任意超集是超码,而其任意真子集都不能成为超码。
主码(Primary Key):主要用来在一个关系中区分不同元组的候选码。
平凡函数依赖:如果 β ⊆ α,则形如α -> β的函数依赖是平凡的。
第一范式(1NF)
定义:如果一个关系模式 R 的所有属性的域都是原子的,我们称这个关系模式 R 属于第一范式(First Normal Form,1NF)。
如果该域的元素被认为是不可分的单元,我们称一个域是原子的(Atomic)。
比如,电话号码(家庭电话、工作电话、手机号码1、手机号码2)、地址(街道、城市、国家、邮编)这样的多值属性以及组合属性。
- 对于多值属性,为多值集合中的每个项创建一条元组。
- 对于组合属性,让每个子属性本身成为一个属性。
{20170501,李雷, 18312345678}{20170502,韩梅梅,86668888}
第二范式(2NF)
定义:如果一个关系模式 R 中的每个属性 A 都满足下列准则之一,我们称这个关系模式 R 属于第二范式(Second Normal Form,2NF)。
- 它出现在一个候选码中。
- 它没有部分依赖于一个候选码。
函数依赖:给定r(R)的一个实例,实例中所有的元组应该满足,当属性集α的值确定时,必定能确定属性集β的值。
在r(R)的每个合法实例中都满足函数依赖 α -> β(β函数依赖于α)。类似于函数关系 y = f(x)。
例如,下面的例子可以得出 A -> C 是一个函数依赖。
A B C D-----------a1 b1 c1 d1a1 b2 c1 d2a2 b2 c2 d2a2 b3 c2 d3a3 b3 c2 d4
部分函数依赖:
给定r(R)的一个实例,实例中所有的元组应该满足,当属性集α的值确定时,必定能确定属性集β的值。
在r(R)的每个合法实例中都满足函数依赖 α -> β(β函数依赖于α)。类似于函数关系 y = f(x)。
例如,下面的例子可以得出 A -> C 是一个函数依赖。
定义:2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
完全函数依赖:在一张表中,若X->Y,且对于X的任何一个真子集(假如属性组X包含超过一个属性的话),X’->Y不成立,那么我们称Y对于X完全函数依赖,记作XF->Y。
部分函数依赖:假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么就称 Y 的部分函数依赖于 X,记作XP->Y。
传递函数依赖:假如 Z 函数依赖于 Y,且 Y 函数依赖于 X(),那么久称 Z 传递函数依赖于 X,记作 XT->Z。
非主属性:包含在任何一个码中的属性称之为主属性。反之称之为非主属性。
对于符合2NF的要求,方法如下:
1、找出数据表中所有的码。
2、根据之前所得到的码,找出所有的主属性。
3、数据表中,出去所有的主属性,剩余的就是非主属性了。
4、查看是否存在非主属性对码的部分函数依赖。
第三范式(3NF)
定义:如果一个具有函数依赖集F的关系模式R,对于F+中所有函数依赖满足下列准则之一,我们称这个关系模式 R 属于第三范式(Third Normal Form,3NF)。
- α -> β是一个平凡的函数依赖。
- α 是 R 的一个超码。
- β - α 中的每个属性 A 都包含于 R 的一个候选码中。
- 它没有部分依赖于一个候选码。
定义:3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。
也就是说,如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。
BCNF范式
定义:如果一个具有函数依赖集F的关系模式R,对于F+中所有形如α -> β的函数依赖(其中α ⊆ β且β ⊆ R),满足下列准则之一,我们称这个关系模式R属于BCNF(Boyce-Codd Form,BCNF)。
- α -> β是一个平凡的函数依赖。
- α 是 R 的一个超码。
定义:在第三范式的基础上,数据库表中如果不存在如何字段对任一候选关键字段的传递函数依赖,则该数据表符合BCNF范式。