ORACLE数据依赖及范式

Posted swust_wjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE数据依赖及范式相关的知识,希望对你有一定的参考价值。

一、数据依赖

1.什么是数据依赖?
  一个关系中的属性相互之间存在联系,称之为数据依赖。
数据依赖可分为函数依赖和多值依赖两种。

1.1函数依赖

定义:设R(U)是属性集U上的一个关系模式,X,Y是U的子集,若对关系模式R(U)的任何一个当前关系,不可能有两个元组在属性集X上的值相同而在属性集Y上的值不同,则称X函数决定Y或Y函数依赖于X,
    记作X  ->  Y。称X为决定因素。

举例:如果X -> Y,但Y ⊈ X,则称其为非平凡的函数依赖,否则称为平凡的函数依赖。
(S#,Sname)-> Sname是平凡的函数依赖

1.1.1传递函数依赖:

在R(U)中,如果X->Y,Y -> Z,且Y ⊈ X,Y -/-> X,则称Z对X传递函数依赖。

如果Y->X则不存在传递函数依赖

传递函数依赖有时会引发异常,需要破坏掉传递函数依赖



1.1.2部分函数依赖

如果AB->C,B->C,则C对AB部分函数依赖,即只需要主码的一部分即可推出函数式右边的。

部分函数依赖引发异常


二、码


候选码:
主码:若R(U , F)有多个候选码,则可以从中选定一个作为R的主码。
主属性:包含在每一个候选码中的属性,称作主属性。
全码:关系模式的码由整个属性组构成。如SCP(S#,C#,P#)

三、范式

定义:

范式就是符合某一种级别的关系模式的集合。

范式表达了关系的不同数据依赖程度。

关系中范式的级别越高越好,通常3范式已经可以达到我们的目标,因为范式级别越高,关系越多。


1NF即1范式

定义:关系中每一个分量不可再分,是最小的分量。关系模式中的所有域为简单域,其元素不可再分,即属性不能再分,是属性项而不是属性组。

2NF

定义:消除了部分依赖的范式

每个非主属性完全依赖于码(消除非主属性对码的部分依赖)

3NF

定义:消除了传递依赖的范式,消除了非主属性对码的传递依赖。

BCNF(改进的第三范式)

定义:在第三范式的基础上,对于每个函数依赖,在函数依赖的左边都包含了主码。


四、模式分解

模式分解要保持函数的依赖,分解要具有无损连接性。

分解算法一

例1.

R(CTHRSG)
    F=C ->T,HT  ->R,HR ->C,HS  ->R,
    CS ->G

1、每个函数依赖形成一个关系
2、码相同的关系合并
3、如果分解后的某关系R1,是另一关系R2的子集,则消去R1.

F=C ->T,HT ->R,HR ->C,HS ->R,CS ->G
R1(CT),R2(HTR),R3(HRC),R4(HSR),R5(CSG)

分解算法二

例2.R(CTHRSG)
F=C ->T,HT ->R,HR ->C,HS ->R,CS ->G

分解方法 
1 在合成法的基础上增加关系R(X),X是原关系的码
2 如果新增加的关系R已经包含在其他关系中,则消去R

F=C ->T,HT ->R,HR ->C,HS ->R,CS ->G
R1(CT),R2(HTR),R3(HRC),R4(HSR),R5(CSG)
R6(HS)

HS为码,因为R4(HSR)中已经包含了HS两项属性,故不需要R6
最终分解结果:
R1(CT),R2(HTR),R3(HRC),R4(HSR),R5(CSG)

五、最小函数依赖集

定义:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。

(1) F中任一函数依赖的右部仅含有一个属性。
(2) F中可以被间接推出来的去掉




以上是关于ORACLE数据依赖及范式的主要内容,如果未能解决你的问题,请参考以下文章

oracle 总结

Oracle_高级功能 数据库设计

数据库 函数依赖及范式(最通俗易懂)

简述数据库设计的范式及应用

规范化设计的范式的个人理解

三范式