红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【MySQL】关系理论

本篇内容是https://www.bilibili.com/video/BV1Bq4y1Y7GC的笔记

关系理论

函数依赖

  • 非平凡的函数依赖:X推出Y,但Y不是X的子集
  • 平凡的函数依赖:X推出Y,且Y是X的子集
  • 完全函数依赖:X推出Y,且对于X的任意真子集X‘,都有X’不能推出Y
  • 部分函数依赖:Y不完全函数依赖于X,如有A推出C,又有AB推出C,则C是部分函数依赖AB的,会造成数据冗余

候选码

一个属性组,通过该属性组推出所有属性,且该属性组的任意子集都不能再推出所有属性,即满足完全函数依赖的前提下的最小属性组

例:集合\(U=\{A,B,C,D,E,G\}\),函数依赖集\(F=\{AB\rarr C, CD \rarr E , E\rarr A, A\rarr G\}\)

方法:

找出一定属于、可能属于与不属于后续码的属性:

  • 一定属于:属性只出现在左边,或者左右都没出现
  • 可能属于:属性左右都出现
  • 不属于:属性只出现在右边

上面B和D只出现在左边,没有同时出现的属性,因此和D一定属于候选码

A、C和E左右都有,则这三个是可能属于候选码的属性

G只在右边出现,则G不属于候选码

对确定的属性求闭包,若不能构成候选码,则将确定的属性和待定的属性组合,求闭包,直到得到的属性组可以推出全部属性

如对上面的属性组求闭包

首先对确定的属性BD求闭包:\((BD)^0=BD, (BD)^1=BD\),此时BD的闭包等于BD,而非全部属性,因此考虑添加待定属性

对属性BDA求闭包:\((BDA)^0=BDA, (BDA)^1=BDACG, (BDA)^2=BDACGE\),此时已经可以推出全部属性,则是候选码

以此类推,\(\{(BDA), (BDC), (BDE)\}\)都是U在F下的候选码

注意:闭包还可以判断X推出Y是否成立,当Y属于X的闭包时,有X推出Y

超码

能推出所有属性的属性组和集合,候选码是超码的子集

主码

当有多个候选码时,可以挑出一个作为主码,简称码

主/非主属性

  • 主属性:包含在任何一个候选码中的属性
  • 非主属性:不包含在任何一个候选码中的属性

外码

关系模式R中,若有一个属性或属性组X,他不是R的码,但X是另一个关系模式S中的码,则X是R的外码

全码

整个属性组中都是码

范式

1NF

所有属性都是不可分割的数据项,即表中每个单元格都只能包含单一的数据,不能有重复组或嵌套结构,这是满足关系数据库的最低要求

2NF

在满足1NF的前提下,不包含非主属性对码的部分函数依赖,即每一个非主属性都完全函数依赖于码

3NF

在满足2NF的前提下,不包含非主属性对码的传递函数依赖,传递函数依赖指若存在\(A\rarr B\)\(B\rarr C\),则C传递依赖于A

BCNF

每一个非平凡的函数依赖\(X\rarr Y\),X都必须是一个候选码

表现在函数依赖集中,左边的部分都要包含整个候选码

判断与分解方法

设关系\(R\{A,B,C,D\}\)

2NF:

若码是AB,F中为\(\{A\rarr C, AB\rarr D\}\),C只需要A就能推出,则C部分函数依赖于AB,不是2NF

若要分解为2NF,只需将不符合要求的拿出来,分为\(R\{A,B,D\}\)\(R\{A,C\}\)

3NF:

若码是AB,F中为\(\{AB\rarr C, C\rarr D\}\),不存在部分函数依赖,但是对于D需要AB推出C后间接推出D,则D传递函数依赖于AB,不满足3NF

若要分解为3NF,同样将不符合要求的拿出来,分为\(R\{A,B,C\}\)\(R\{C,D\}\)

BCNF:

若R是\((A,B,C)\),F是\(\{AC\rarr B, AB\rarr C, B\rarr C\}\),候选码则是AC和AB,对于\(B\rarr C\)决定因素B不包含码,则不是BCNF

最小函数依赖集

求最小函数依赖集的方法:

  • 拆分右侧:类似把\(A\rarr BC\)拆为\(A\rarr B\)\(A\rarr C\)

  • 去除自身求闭包:将当前关系去掉,求该关系的闭包,若可以通过其他关系得到右侧,则直接删除当前依赖关系

  • 左侧最小化:对于目前保留下来的关系,观察左侧是否有能相互推出的,若有可以直接删除被推出的那个

    \(ACD\rarr B, C\rarr A\),就可以删除ACD中的A

模式分解

准则:无损连接,保持函数依赖

无损连接:分解后再次自然连接,与分解前相同

判断无损连接的方法:

  • 画表格,列出所有的属性,有多少个属性就画多少属性列,行表示分解后的关系,有几个关系就画几个关系行
  • 根据每一行的关系判断,找出关系中的每个属性对应第几列,在相应位置标上\(a_j\),j为列数,其余关系中不存在的属性标为\(b_{ij}\)
  • 依次对函数依赖集中的各个依赖关系进行考察,如有\(XY\rarr Z\),在属性列中找到X和Y,观察X和Y的行列上是否有相同的标记(b下标相同),若有则查看他们对应在属性列Z上的各个标记,其中若有\(a_j\)则将属性列上的这些标记全改为\(a_j\),若没有则找到i值最小的\(b_{ij}\),将这些标记全改为它
  • 反复执行以上操作,直到某一行全变为a,表明具有无损连接性,否则不具有无损连接性

关系语言

关系代数语言

设有关系R或S

集合运算符

  • 并:R∪S,属于R或S的元组构成
  • 差:R-S,属于R但不属于S的元组构成
  • 交:R∩S,既属于R又属于S的元组构成
  • 笛卡尔积:R×S,由R中每个元素与S中所有元素组合

关系运算符

假设有一个成绩表score,列分别为sno, sname, sscore

  • 选择:得到表中的指定行,写作\(\sigma_{条件}(表名)\)

    如获取学号为1的行:\(\sigma_{sno=1}(score)\)

  • 投影:得到表中的指定列,写作\(\pi_{条件}(表名)\)

    如获取成绩这一列的信息:\(\pi_{sscore}(score)\)

  • 连接:将两个表根据指定条件连接在一起,写作\(表名\Join_{条件}表名\)

    • 等值连接:条件为属性R.A=S.B
    • 自然连接:条件为属性R.A=S.A,且去除重复列,写作\(R\Join S\)
    • 悬浮元组:自然连接时由于S中不匹配而在R中被舍弃的
    • 外连接:保留悬浮元组的连接,不匹配的位置填NULL,写作⟗
    • 左外连接:只保留R中悬浮元组的连接,写作⟕
    • 右外连接:只保留S中悬浮元组的连接,写作⟖
  • 除:设R和S除运算结果为T,则T包含所有在R中但不在S中的属性和值,且T的元组与S的元组经过组合均能出现在R中(题中描述为全部 )

    例:A中包含属性x和y,B中包含属性y,且B中属性y的值为全集且无重复,则求全部y的x写作:\(\pi_{x,y}(A)÷\pi_{y}(B)\)

​ 如下student表:

sno sname age sdept
1 张三 18 计算机
2 李四 19 计算机
3 王五 19 计算机
4 赵六 19 通信

​ S2表:

age sdept
19 计算机

则student表除以S2表的结果是

sno sname
2 李四
3 王五

即除法的意思是满足S2中所有条件的信息,但不包含S2中的字段的其他字段组成的新表

ER图

以下说的都是Chen‘s ER图

格式

  • 实体:方框

  • 关系:菱形

  • 属性:圆形

  • 联系:

转换关系模型

  • 将各个实体的名字转换为各个关系模型的名字

  • 实体属性就是关系属性,实体的码就是关系的码

    用实体名(属性…)表示,主码用下划线指定

  • 实体间联系转换

    • 一对一:在任意一方加入对方的主码并设为其外码,并加入联系本身的属性
    • 一对n:将一方的主码加入n方作为外码,同时将联系的属性加入n方
    • n对m:将联系本身转换为一个关系模式,将双方的主码加入其中并设为外码,并将联系属性放入其中