关系数据库理论

关系数据库理论

规范化

规范化理论的内容主要包括三个方面的内容:

              函数依赖、范式、模式设计

规范化的关系模式要满足的要求

  • 尽可能减少数据冗余、没有插入异常、
    没有删除异常、没有更新异常

不合理的关系模式存在的异常问题

  • 数据冗余
  • 插入异常
  • 删除异常
  • 更新异常

一个关系模式并不是在任何情况下都是最优的,要从实际的设计目标出发进行设计

关系模式的范式

范式的分类

  • 第一范式 1NF

    • 每个分量都是不可再分的数据项(值、原子)
    • 存在问题:插入异常、删除异常,更新异常、数据冗余
  • 第二范式 2NF

    • 每一个非主属性 完全函数依赖 于 候选键(码)
    • 存在问题:插入异常、删除异常,更新异常、数据冗余
  • 第三范式 3NF

    • 每一个非主属性 都不传递依赖于 码。
    • 数据冗余大大降低,不存在前面的异常
  • BCNF范式

    • 不存在 主属性 对于 码 的 部分函数依赖 与 传递函数依赖。判断方法:箭头左边的必须是候选码

规范化的方法 模式分解

  • 当模式不符合关系范式时,需要进行模式分解。

  • 把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。

  • 分解的特征

    • 数据内容的等价性。 即:分解后的数据内容 与 原始数据内容 相比 不能多,也不能少。分解的无损连接性;
    • 数据约束的等价性。 即:分解后的数据约束(依赖关系)等不能丢失。分解的保持依赖性;
  • 无损连接

    • 定义:无损联接分解是将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式,则称这种分解为无损联接分解。

      https://blog.csdn.net/legendaryhaha/article/details/80649234 案例

    • 测试方法 :https://blog.csdn.net/legendaryhaha/article/details/80649234

数据依赖

函数依赖

  • 定义:关系模式中的个属性之间相互依赖、相互制约的联系称为数据依赖

  • 平凡函数依赖

    • 定义:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。
  • 非平凡函数依赖

    • 定义:当关系中属性集合Y是属性集合X的子集时(Y⊆X),存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。

    • 完全函数依赖

      • 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。
    • 部分函数依赖

      • 设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。
    • 传递函数依赖

      • 设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X
    • 属性集的闭包及其算法

      • 闭包就是由一个属性直接或间接推导出的所有属性的集合。例如:f={a->b,b->c,a->d,e->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d};

  • 码 :是一个或多个属性的集合。

  • 超码:是一个或多个属性的集合,超码中的这些属性可以让我们在一个实体集中唯一地标识一个实体。

  • 候选码:候选码是极小的超码集,也就是它的任意真子集都不是超码,而他本身是超码。(算法)

    一、候选码的确定(算法)
    设关系模式R中U=ABC…等N个属性,U中的属性在FD中有四种范围:
    (1)左右出现;
    (2)只在左部出现;
    (3)只在右部出现;
    (4)不在左右出现;
    算法:按以下步骤求候选键:
    1.只在FD右部出现的属性,不属于候选码;
    2.只在FD左部出现的属性,一定存在于某候选码当中;
    3.外部属性一定存在于任何候选码当中; (左右都不出现);
    4.其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码。
    二、候选码以及属性相关的案例;
    U={学号,姓名,年龄,班号,班长,课号,成绩 }
    候选键:学号,课号;
    主属性:学号,课号;(主要的属性,能决定其他属性的), 即:学号,课号称为U的主属性;
    非主属性:U中剩余的属性,即:姓名,年龄,班号,班长,成绩;
    例1:R<U,F>,U=(A,B,C,D,E,G),F={AB–>C,CD–>E,E–>A.A–>G},求候选码以及主属性。
    因为:G只在右边出现,所以候选码肯定不包含G,BD只出现在左边,所以,候选码中肯定有BD,而BD的闭包还是BD,则对BD进行组合,除了G以外,BD可以跟A,C,E进行组合。
    先看ABD
    ABD本身自包ABD,而AB–>C,CD–>E,A–>G,所以ABD的闭包为ABDCEG=U
    再看BDC
    CD–>E,E–>A,A–>G,BDC本身自包,所以BDC的闭包为BDCEAG=U
    最后看BDE
    E–>A,A–>G,AB–>C,BDE本身自包,所以BDE的闭包为BDEAGC=U
    因为(ABD)、(BCD)、(BDE)的闭包都是ABCDEG所以本问题的候选码有3个分别是ABC、 BCD和BDE

    候选码:ABC,BCD,BDE;
    主属性:ABCDE;
    非主属性:G;

  • 一个表的候选码可能有多个,从这些个候选码中选择一个做为主码,至于选择哪一个候选码,这个是无所谓的,只要是从候选码中选的就行

  • 主码是被选中用来在一个关系中区分不同元组的候选码。

  • 主属性:构成某一个候选关键字(候选码)的属性集中的一个属性

  • 闭包

    • 闭包:就是由一个属性直接或间接推导出的所有属性的集合。

      例如:f={a->b,b->c,a->d,e->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d};

最小函数依赖集(最小覆盖)

1、定义:
如果函数依赖集F满足以下条件,则称F为一个极小函数依赖集。也称为最小依赖集或最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F-{X→A}U{Z→A}与F等价。

2、最小依赖集通用算法:
① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;
② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
③ 去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。(以上步骤中,求出关系依赖集F,此时,再F的基础上,求出X或者Y的闭包,是否包含A)
3、最小依赖集案例:
例1:关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC};求F的最小函数依赖集
步骤:
(1)用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;得到:F={B->D,DG->C,BD->E,AG->B,ADG->B,ADG->C};
(2)去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,依次做下去。直到找不到冗余的函数依赖;
① 去掉B->D,此时F={DG->C,BD->E,AG->B,ADG->B,ADG->C},此条件下得出B的闭包 B+ = B;B+不包含D,所以B->D保留。
②去掉DG->C,此时F={B->D,BD->E,AG->B,ADG->B,ADG->C},此时DG闭包DG+ = DG,不包含C,所以不能去掉DG->C.
③ 去掉BD->E,此时F={B->D,DG->C,AG->B,ADG->B,ADG->C},此时闭包BD+ = BD,不包含E,所以不能去掉BD->E,继续保留。
④去掉AG->B,此时F={B->D,DG->C,BD->E,ADG->B,ADG->C};此时AG+ = AG,不包含B,所以不能去掉AG->B,继续保留。
⑤去掉ADG->B,此时F={B->D,DG->C,BD->E,AG->B,ADG->C},此时ADG+ = ADGCBE,包含了B,所以删除ADG->B,不保留。
⑥去掉ADG->C,此时F={B->D,DG->C,BD->E,AG->B},此时ADG+ = ADGCBD,包含了C,所以删除ADG->C,不保留。
综上所得,此时得到F={B->D,DG->C,BD->E,AG->B};
(3)去掉各依赖左部多余的属性。一个一个地检查函数依赖左部非单个属性的依赖。
此时函数依赖左边非单个属性有:DG->C,BD->E,AG->B;所以做如下操作:
①先来看DG->C,首先去掉D,则此时G的闭包G+ = G,不包含C,保留D。再次去掉G,此时D+ = D,不包含G,所以G也不能去掉;
②再来看BD->E,首先去掉B,得到此时D的闭包D+ = D,不含E,保留B。然后去掉D,此时B+ = BDE,包含了D,所以去掉D,即得出:B->E;
③最后再来看AG->B,去掉A,G+ = G,不包含B,不能去掉A。去掉G的时候,A的闭包A+ =A,不含B,不能去掉A,还是AG->B ;
所以最后得出:F的最小函数依赖集是:F={B->D,DG->C,B->E,AG->B};

多值依赖

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值