数据库范式介绍

  |  
 阅读次数

关系数据库·范式介绍

一、基本介绍

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈 递次规范,越的 范式 数据库冗余越小

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。

范式的包含关系。一个数据库设计如果符合第二范式,一定也符合第一范式。如果符合第三范式,一定也符合第二范式…

数据库基本概念

要理解范式,首先必须对知道什么是关系数据库,简单的说:关系数据库就是用二维表来保存数据。表和表之间可以……(省略10W字),如果对数据库很熟悉,可以不用理会下面的概念。

实体: 现实世界中客观存在并可以被区别的事物。比如“一个学生”、“一本书”、“一门课”等等。值得强调的是这里所说的“事物”不仅仅是看得见摸得着的“东西”,它也可以是虚拟的,不如说“老师与学校的关系”。

属性: 教科书上解释为:“实体所具有的某一特性”,由此可见,属性一开始是个逻辑概念,比如说,“性别”是“人”的一个属性。在关系数据库中,属性又是个物理概念,属性可以看作是“表的一列”。

元组:表中的一行就是一个元组。

分量元组的某个 属性值。在一个关系数据库中,它是一个操作原子,即关系数据库在做任何操作的时候,属性是“不可分的”。否则就不是关系数据库了。

码(键):表中可以唯一确定一个元组的某个 属性(或者属性组),如果这样的码有不止一个,那么大家都叫 候选码,我们从候选码中挑一个出来做老大,它就叫主码(主键)

全码:如果一个码包含了所有的属性,这个码就是全码。

主属性:一个属性只要在任何一个候选码中出现过,这个属性就是主属性。

非主属性:与上面相反,没有在任何候选码中出现过,这个属性就是非主属性。

外码:一个属性(或属性组),它不是码,但是它别的表的码,它就是外码。

候选码: 若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何真子集都不能再标识,则称该属性组为(超级码)候选码。

数据库,部分函数依赖,传递函数依赖,完全函数依赖,三种范式的区别

函数依赖: 设X,Y是关系R的两个属性集合,存在X→Y;则称Y 函数依赖于X。

部分函数依赖:设X,Y是关系R的两个属性集合,存在X→Y; 若X’是X的真子集,存在X’→Y,则称Y 部分函数依赖于X。

完全函数依赖:设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y; X’是X的真子集,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。(个人理解为 只能通过 X确定 Y,并且每个X’ 都不能确定Y 的关系 就是完全函数依赖)

传递函数依赖:设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z(Z !→Y),则称Z传递函数依赖于X。

假如 Z 函数依赖于 Y,且 Y 函数依赖于 X (『Y 不包含于 X,且 X 不函数依赖于 Y』这个前提),那么我们就称 Z 传递函数依赖于 X ,记作 X T→ Z,如图3。

二、6种范式

前面说到,范式越高,数据的冗余越小。其实没有冗余的数据库设计是可以做到的。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。具体做法是:在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字段,允许冗余。(最典型的就是在一些数据表中不仅存作为外键的user_id,同样存user_name,这样虽然违反数据库范式增加了user_name字段,但是却提高了效率,减少了获取user_id后再去user表中获取user name的操作)

所以实际中,我们只需要考虑数据库满足第三范式就可以了,下面以最通俗的方式来解释数据库的范式。

第一范式(1NF):属性不可分

(1NF是对属性的原子性约束,要求属性具有原子性,不可再分解)

不满足第一范式的数据库,不是关系数据库!

第二范式(2NF):符合1NF,并且非主属性完全依赖于码。

第二范式要求非主属性依赖于主关键字。

(2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性,更通俗说有主键ID)

第三范式(3NF):符合2NF,并且,消除传递依赖。
(3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余)