新闻资讯
看你所看,想你所想

关係範式

关係範式

範式也叫关係範式,因为範式存在于关係中。範式是关係模式满足不同程度的规範化要求的标準。满足最低程度要求的範式属于第一範式,简称1NF;在第一範式中进一步满足一些要求的关係属于第二範式,简称2NF,依次类推,还有3NF、BCNF、4NF、5NF,这些都是关係範式。对关係模式的属性间的函式依赖加以不同的限制就形成了不同的範式。这些範式是递进的,即如果是一个关係是1NF的,它比不是1NF的关係要好;同样,2NF的关係比1NF的关係要好等等,範式越高、规範化程度越高,关係模式就越好。

基本介绍

  • 中文名:关係範式
  • 出现学科:资料库
  • 分类:第一範式,第二範式等
  • 存在:关係中

简介

关係资料库中的关係要满足一定的要求。若关係满足不同程度的要求,就称它属于不同的範式(Normal Form)。

第一範式

定义 设 R 是一个关係模式,如果 R 中的每一个属性 A 的值域中的每个值都是不可分解的,则称 R 是属于第一範式的,记作 R ∈ 1NF。
例如:在关係 SA(姓名,工资)中,属性“工资”还可再分为基本工资,奖金还有补贴 3 个数据项,这违背了第一範式中元组的每个属性不可再分的原则,所以它不满足第一範式。
将非第一範式的关係转换为第一範式的关係非常简单,只需要将所有数据项都分解成不可再分的最小数据项就可以了。例如上面的关係改为 SA(姓名,基本工资,奖金,补贴)即可。

第二範式

定义如果关係 R ∈ 1NF,并且 R 中每一个非主属性完全函式依赖于任一个候选码,则 R ∈ 2NF。
从定义可以看出,若某个 1NF 的关係的主码只由一个列组成,那幺这个关係就是 2NF 关係。但是,如果主码是由多个属性列共同组成的複合主码,并且存在非主属性对属性的部分函式依赖,则这个关係不是 2NF 关係。
例如:在关係 SB(学号,姓名,系名,系主任,课号,成绩)中,、
非主属性“姓名”仅函式依赖于“学号”,也就是“姓名”部分函式依赖于主码(学号,课号)而不是完全依赖;
非主属性“系名”仅函式依赖于“学号”,也就是“系名”部分函式依赖于主码(学号,课号)而不是完全依赖;
非主属性“系主任”仅函式依赖于“学号”,也就是“系主任”部分函式依赖于主码(学号,课号)而不是完全依赖。
所以 SB 不满足第二範式,不是 2NF 关係。可以用模式分解的方法将非 2NF 的关係模式分解为多个 2NF 的关係模式。去掉部分函式依赖关係的分解过程如下:
1. 用组成主码的属性集合的每一个子集作为主码构成一个表。
2. 对于每个表,将依赖于此主码的属性放置到此表中。
例如:将 SB 分解为两个关係模式
SC(学号,课号,成绩),主码为(学号,课号)
SD(学号,姓名,系名,系主任),主码为 学号。

第三範式

定义 如果关係 R ∈ 2NF,并且 R 中每一个非主属性对任何候选码都不存在传递函式依赖,则 R ∈ 3NF 。
从定义中可以看出,如果存在非主属性对主码的传递依赖,则相应的关係模式就不是 3NF。
接着上面的例子,关係模式 SC 和 SD 均是 2NF 的,但在关係 SD(学号,姓名,系名,系主任)中,存在如下函式依赖:
学号 → 系名
系名 → 系主任
系名 -\→ 学号
那幺,存在着一个传递函式依赖“学号 → 系主任”成立。
从上面的分析可以知道,因为在 SD 中存在传递函式依赖,所以 SD 不满足 3NF。因此需要对其进行下一步的分解。去掉传递函式依赖的分解过程如下:
1. 对于不是候选码的每个决定因子,从关係模式中删除依赖于该决定因子的属性。
2. 新建一个关係模式,新的关係模式中应包含在原表中所有依赖于该决定因子的属性。
3. 将决定因子作为新关係模式的主码。
例如:将 SD 分解为
SE(学号,姓名,系名)
SF(系名,系主任)
这两个关係模式不再存在传递依赖,它们均为第三範式。在通常的资料库设计中,一般要求要达到 3NF。3NF 是一个实际可用的关係模式应满足的最低範式。

转载请注明出处海之美文 » 关係範式

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:ailianmeng11@163.com