数据库规范化设计包含的方面

①数据依赖(核心):数据之间的联系
②范式:关系模型的标准
③模式设计方法:规范化的方法

关系的五元组表示

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,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->YY->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范式的分解可能会丢失某些函数依赖,这称为不保持函数依赖的分解,这样的分解会丢失某些语义。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐