[Note] 关系数据理论

[Note] 关系数据理论


目标和问题的提出

关系模式是指关系(表)之间的联系.

对于一个现实的场景,应该如何设计关系和关系之间的关系.

比如:冗余项,很多向量的某属性是同一个,这就造成了很大的空间浪费和修改后的完整性校验的隐患.

一个好的关系模式是不会发生异常,以及冗余尽量小.

问题是某些数据依赖造成的.

数据依赖

设U为关系模式中的属性集合.

对于某些属性,确定该(或多个)属性就确定了另一个属性;比如学号和院系.但反过来不行,这就叫函数依赖.记作 f ( n a m e 1 , 2 , . . . . ) = n a m e f(name1,2,....)=name .

这样的函数依赖集合记为F.

数据依赖是完整性约束的表现形式,体现于属性值内的关联问题.

  • 函数依赖
  • 多值依赖
  • 连接依赖

关系模式的简化描述

R(U,D,DOM,F)

  • R:关系名
  • U:属性的集合
  • D:U来自的域
  • DOM:属性对域的映像集合
  • F:属性之间依赖的关系集合

简化为 R < U , F > R<U,F>

仅保留属性和之间的关系

当r满足F时称r为R的一个关系(实例化)

为优化和排除问题,使用规范化理论进行优化.

关系的规范化

函数依赖(*)

定义

R e l a t i o n s h i p   r U , X , Y U , i f r ( X )   i s   e q u a l , ∄ r ( Y )   i s   n o t   e q u a l . \forall Relationship\ r\in U,X,Y\in U,if r(X)\ is\ equal,\not\exists r(Y)\ is\ not\ equal.

则称X决定Y或Y依赖X,记作 X Y X\rightarrow Y .

注意:X和Y都是U上的属性(组)

否则写作 X ↛ Y X\not\rightarrow Y

对于该属性的所有下属数据都应该遵守.

反过来说,不能仅仅看关系给出的实例(向量)就推出依赖条件,要研究给出的语义确定.

平凡依赖

X Y , Y ∉ X X\rightarrow Y,Y\not\in X

这是非平凡的.
X Y , Y X X\rightarrow Y,Y\in X
这是平凡的.

平凡的函数依赖不反映有意义的语义,所以讨论非平凡的.

完全依赖/部分依赖

如果 X Y X\rightarrow Y X X , X ↛ Y \forall X'\in X,X'\not\rightarrow Y ,则称Y完全函数依赖X.此时X是最小决定Y的关系集-没有冗余

否则称部分函数依赖.

部分函数依赖意味着有冗余关系属性.

传递依赖

i f X Y , Y ∉ X , Y ↛ X , Y Z if\\ X\rightarrow Y,Y\not\in X, Y\not\rightarrow X,Y\rightarrow Z

称Z对X传递.

如果 X Y , Y ∉ X , Y X X\rightarrow Y,Y\not\in X, Y\rightarrow X ,Z为直接依赖.此时X和Y是一对一的关系(函数单调?).

?

设K为U中的属性组, K F U K\rightarrow^F U 完全依赖称候选码

如果 K P U K\rightarrow^P U 部分依赖,称K为超码(?)

候选码是最小的超码

主码

主属性/非主属性

全码

外部码:U中属性(组)X不是R的码但是是另一个关系的码,称X为R的外部码.

See: https://blog.csdn.net/G_beginner/article/details/6773288

Also: https://blog.csdn.net/qq_38213586/article/details/84348470

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

超码

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

候选码

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

主码

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

范式

范式是符合某级别的关系的模式的集合

范式就是对关系模式的不同级别的规范

低级范式包含高级范式

规范化

通过模式分解,将低级关系转化为几个高级关系模式的集合

1NF

所有数据项都是不可分的(即无表中表),所有属性都是同级的不存在附属关系.

最基本的要求

插入异常:当部分主属性合法缺失时无法插入

删除异常:删除部分信息时删除了向量的其他信息

数据冗余大

2NF

每个非主属性都完全函数依赖R的码,不存在部分依赖主属性的属性

也就是属性组R决定而且刚好决定其他每个属性

To reach:分解模式

可以解决1NF的插入和删除问题,简化修改操作.

还是不能完全消除异常和冗余,存在非主属性对码的传递函数依赖

3NF

非主属性没有部分依赖也没有传递依赖.

定义:不存在 X Y , Y Z , Y ↛ X X\rightarrow Y,Y\rightarrow Z, Y\not\rightarrow X 的X:码;Y:属性组;Z非主属性( Y ∉ Z Y\not\in Z )

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXQdtxWu-1571154376503)(C:\Users\I-Hsien\AppData\Roaming\Typora\typora-user-images\1571146906630.png)](https://img-blog.csdnimg.cn/20191015234810135.png)

这样的就不是3范式.(Sloc在语义定义中是由Sdept决定的,也就是由Sno决定.下面的箭头是逻辑依赖而不是语义依赖.)

性质:不部分依赖也不传递依赖

BCNF(3.5NF)

所有属性没有部分依赖也没有传递依赖.

进一步消除了主属性对码的函数依赖.

定义:
X Y   a n d   X ∉ Y , X \forall X\rightarrow Y\ and\ X\not\in Y,X必含有候选码
则称BCNF.

性质:所有非主属性对每一个候选码都是完全函数依赖,所有主属性对每一个不包含的候选码是完全函数依赖,没有任何属性完全函数依赖于非码的任何属性.

BCNF理论上已经达到最大的规范程度.

多值依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LQtnQAxV-1571154376504)(C:\Users\I-Hsien\AppData\Roaming\Typora\typora-user-images\1571150366189.png)]

C T C\rightarrow\rightarrow T

有对称性,传递性.

4NF

对于每个非平凡多值依赖 X Y X\rightarrow\rightarrow Y ,X都含有候选码.也就是只允许函数依赖而不允许其他的多值依赖模式

若X->->Y,而Z=U-X-Y空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

Conclusion

范式的作用:消除决定因素非码的非平凡函数依赖

  • 1NF消除表中表(非平凡)
  • 2NF消除非主属性对码的传递函数依赖
  • 3NF消除非主属性对码的传递函数依赖
  • BCNF消除主属性对码的部分依赖和传递函数依赖
    ,称X->->Y为非平凡的多值依赖。

可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

Conclusion

范式的作用:消除决定因素非码的非平凡函数依赖

  • 1NF消除表中表(非平凡)
  • 2NF消除非主属性对码的传递函数依赖
  • 3NF消除非主属性对码的传递函数依赖
  • BCNF消除主属性对码的部分依赖和传递函数依赖
  • 4NF消除非平凡且非函数依赖的多值依赖
发布了80 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/POTASSIUM711/article/details/102577260