您的位置:首页 > 数据库

【知识碎片】5:数据库规范化设计中的函数依赖和范式

2018-03-28 11:14 369 查看

数据库规范化设计

包含的方面

①数据依赖(核心):数据之间的联系

②范式:关系模型的标准

③模式设计方法:规范化的方法

关系的五元组表示

R<U,D,Dom,F>
关系名称<属性集,域,属性集和域的映射,函数依赖集>


属性集U:包含现实问题的所有属性。

域D:属性的取值。

属性集和域的映射Dom:每个属性取什么域。

函数依赖集F:属性和属性间的联系。

简化的三元组表示

R<U,F>
关系名称<属性集,函数依赖集>
将精力着重在函数依赖(一种最重要的数据依赖)上。

关系模型的内涵和外延

内涵(Intension):即
R
,即
关系模式
,即表的表头,与数据无关,仅是关系的结构。

外延(Extension):即
r∈R
,即
关系
,即具体的一张表。

内涵(关系模式)

①对数据的定义

②对数据完整性约束的定义

[1]静态约束:数据依赖,主键设计,值域设计。

[2]动态约束:各种操作(插入,删除,修改)对关系值的影响。

泛关系和泛关系模式

泛关系:所研究的问题中的所有属性都在一张表中,这张具体的表为泛关系。

泛关系模式:所研究的问题的所有属性组成的关系模式
R(U)


关系模式的冗余和异常

①数据冗余

指同一个数据在系统中多次重复出现。占用更多的存储空间并非大问题,主要问题在于数据冗余容易带来数据不一致的问题,影响一致性。

②操作异常

并非一定由数据冗余引起!

[1]修改异常:往往由数据冗余引起。

如(SNO,CNO,TNAME,…)中修改某门课的老师时需要修改所有选了该课的学生的教师。

[2]插入异常:需要破坏实体完整性才能实现的插入。

如只有(SNO,CNO,TNAME,…)表时,需要插入没有学生选修的一门课时,主属性之一的SNO却不能为空。

[3]删除异常:往往由数据间的依赖关系引起。

如只有(SNO,
4000
CNO,TNAME,…)表时,需要删除某个学生选的某个课,却需要将课程号和教师名字段一起删除。试想如果该课程只有这一位学生选了,该删除操作将使得数据库中无法表示”这位老师的这门课开课了”这件事。

函数依赖(FD)

定义

对于任意的r属于R,对于任意的t和s属于r中的元组,t[X]=s[X]蕴含(则)t[Y]=s[Y],那么FD X->Y在关系模式R(U)中成立。称X决定Y,Y依赖于X。

FD的书写形式

形式为
属性集合 蕴含 属性
,例如
(SNO,CNO)->GRADE


FD的分类

①完全函数依赖

写为
X-f->Y
,X的任何真子集都不能决定Y。对于X和Y组成的关系模式,X一定是一组候选键

②部分函数依赖

写为
X-P->Y
,即存在X的真子集可以决定Y。对于X和Y组成的关系模式,X一定是一组超键

③传递依赖

是指
X->Y
Y->Z
又有
Y-/->X
(Y不能决定X)的
X->Z
函数依赖。

两个与FD相关的判断

①不在函数依赖右边出现的属性,一定出现在候选键中。

②只在函数依赖右边出现的属性,一定不在候选键中。

关系模式的范式

通过对关系进行拆分,来满足更严格的关系范式。

如果数据库模式中每个模式都满足某一范式,则整个数据库模式为满足该范式的数据库模式。

①第一范式1NF

关系模式R的每个关系r的属性值都是不可再分的原子值。

②第二范式2NF

在1NF的基础上消除非主属性对候选键的部分依赖,即不存在非主属性部分依赖于候选键。

③第三范式3NF

在1NF的基础上消除非主属性对候选键的传递依赖,即不存在非主属性传递依赖于候选键。

3NF一定满足2NF,反证:若R不是2NF,则一定存在候选键K、非主属性A,使得
K-P->A
,即存在K的子属性集k’,使得
K'->A
,同时又有
K->K'
,同时又有
K'-/->K
,所以
K->A
是传递依赖,这和3NF矛盾。因此不是2NF一定不是3NF,即推出是3NF一定是2NF。

④BC范式BCNF

在3NF的基础上消除主属性对候选键的部分依赖和传递依赖。用一句话概括为所有的决定因素都包含码,即所有的函数依赖的左边都包含候选键。

使关系模式满足BC范式的分解可能会丢失某些函数依赖,这称为不保持函数依赖的分解,这样的分解会丢失某些语义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: