3.6.1数据库系统-规范化理论:非规范化存在的问题、规范化理论基本概念、函数依赖、键、求候选键、求候选键实例、函数依赖、Armstrong公理

3.6.1数据库系统-规范化理论:非规范化存在的问题、规范化理论基本概念、函数依赖、键、求候选键、求候选键实例、函数依赖、Armstrong公理

非规范化存在的问题

规范化是在逻辑阶段的一个任务,如果不做规范化,会发现数据会出现一些奇怪的问题。可能包括:数据冗余、更新异常(修改操作一致性问题)、插入异常、删除异常。
请添加图片描述
比如一开始做设计的时候,图方便,会把能用到的所有数据都存放在一张表里,从图中,可以看出,表格数据记录了重复的系号、系名、系位置,
这个系可以抽象成另一个关系,会更好一点,这样就不会造成数据冗余;
同时如果系变动,你需要对所有相关数据进行更新,可能就会漏掉;
同时,你的系依赖于学生,在关系模式种,主键非空唯一,如果说有的系没有学生,那么这个系怎么插入?就会产生插入异常;
学生毕业需要删除学生信息,同时会删掉系信息,可能造成系的丢失。

规范化理论基本概念

这些概念会用于范式判断

函数依赖

设R(U,F)Y是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y,函数依赖是唯一确定的,比如X→Y,但Y→X是不行的。

X→Y,左侧叫做决定因素,右侧叫做被决定因素。

候选键,候选码:可以是多属性集合,也可以存在多个候选码,唯一标识元组,无冗余
主键:候选码中选一个
外键:其他关系的主键
主属性与非主属性:组成候选码的属性就是主属性,其他的就是非主属性

求候选键

  • 将关系模式的函数依赖关系用“有向图”的方式表示
  • 找入度为0的属性,并以该属性集合为起点,尝试遍历有向图,如能正常遍历有向图中所有结点,则该属性集合为关系模式的候选键
  • 若入度为0 的属性集不能遍历图中所有结点,则需要尝试性的将一些中间结点(既有入度,也有出度的结点)并入入度为0 的属性集中,直至该集合能遍历所有结点,集合为候选键

对于入度和出度:在图中,有箭头流入的叫入度,有箭头流出的叫出度,结合函数依赖集合来看,所有出现在箭头左侧的,没有出现在右侧的,记作入度为0,记作L,表示入度为0的属性集合,只有入度,没有出度的,记作R。

在考虑候选键集合的时候,一定包含L集合的属性,一定不包含R集合的属性。

求候选键实例

关系模式P(A,B,C,D,E,F,G,H,I,J)满足下列函数依赖:FD={ABD→E,AB→G,B→F,C→J,CJ→I,G→H},求候选码?

做法
根据函数依赖,先求入度和出度
L:ABDC
R:E,G,F,J,I,H

根据L取推导,看是否可以推出全部属性(A,B,C,D,E,F,G,H,I,J)
ABDC可以推导自身,(A,B,C,D,E,F,G,H,I,J),同时推导出的属性在下面推导可以使用
ABD→E,(A,B,C,D,E,F,G,H,I,J)
B→F,(A,B,C,D,E,F,G,H,I,J)
AB→G,(A,B,C,D,E,F,G,H,I,J)
G→H,(A,B,C,D,E,F,G,H,I,J)
C→J,(A,B,C,D,E,F,G,H,I,J
CJ→I,(A,B,C,D,E,F,G,H,I,J
所以,(ABCD)这个集合是候选码。

用有向图表示
请添加图片描述

函数依赖

函数依赖本身页式规范化理论的基本概念,主要包含部分函数依赖和传递函数依赖。

部分函数依赖
关系模式:R1(A,B,C,D)
依赖集:{AB→D,A→C}
候选键是(AB),对于候选键是组合键来看的话,C只依赖于其中的A,依赖于候选键的一部分,C就叫做是部分函数依赖,只有候选键是多个属性的集合才会出现部分函数依赖

关系模式:R2(A,B,C)
依赖集:{A→B,B→C}
由A→B,B→C,可推导出A→C,次为传递函数依赖

Armstrong公理

关系模式R<U,F>俩说有以下的推理规则:
A1.自反律(Reflexive):若Y⊆X⊆U,则X→Y成立。
A2.增广律(Augmentation):若Z⊆U且X→Y,则XZ→YZ成立。
A3.传递律(Transitive):若X→Y,Y→Z,则X→Z成立。

根据A1,A2,A3这三条推理规则可得到下面三条规则:
合并规则:由X→Y,X→Z,有X→YZ。(A2,A3)
伪传递规则:由X→Y,WY→Z,有XW→Z。(A2,A3)
分解规则:由X→Y及Z⊆Y,有X→Z。(A1,A3)

包含关系

包含的符号有⊇、⊆、⫋。

⊆是包含于符号:A包含于B-则A为B的子集或等于B。

⊇是包含符号:A包含B-则B为A的子集或等于A。

⫋真包含:A真包含于B-则A为B的真子集,若B={1,2},则A={1}或{2}或空集。

定义:

如果集合A的任意一个元素都是集合B的元素(任意a∈A则a∈B),那么集合A称为集合B的子集,记为A⊆B或 B⊇A,读作“集合A包含于集合B”或集合B包含集合A”。

即:∀a∈A有a∈B,则A⊆B。

真子集:
如果集合A是B的子集,且A≠B,即B中至少有一个元素不属于A,那么A就是B的真子集,可记作:A⊊B。

符号语言:若∀a∈A,均有a∈B,且x∈B使x∉A,则A⊊B。

猜你喜欢

转载自blog.csdn.net/qq_41929714/article/details/129732855
今日推荐