【MySQL】关系理论

  • ~2.88K 字
  1. 1. 关系理论
    1. 1.1. 函数依赖
    2. 1.2. 码
      1. 1.2.1. 候选码
      2. 1.2.2. 超码
      3. 1.2.3. 主码
      4. 1.2.4. 主/非主属性
      5. 1.2.5. 外码
      6. 1.2.6. 全码
    3. 1.3. 范式
      1. 1.3.1. 1NF
      2. 1.3.2. 2NF
      3. 1.3.3. 3NF
      4. 1.3.4. BCNF
      5. 1.3.5. 判断与分解方法
    4. 1.4. 最小函数依赖集
    5. 1.5. 模式分解
  2. 2. 关系语言
    1. 2.1. 关系代数语言
      1. 2.1.1. 集合运算符
      2. 2.1.2. 关系运算符
  3. 3. ER图
    1. 3.1. 格式
    2. 3.2. 转换关系模型

本篇内容是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的,会造成数据冗余

码

候选码

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

例:集合,函数依赖集

方法:

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

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

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

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

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

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

如对上面的属性组求闭包

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

对属性BDA求闭包:,此时已经可以推出全部属性,则是候选码

以此类推,都是U在F下的候选码

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

超码

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

主码

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

主/非主属性

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

外码

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

全码

整个属性组中都是码

范式

1NF

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

2NF

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

3NF

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

BCNF

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

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

判断与分解方法

设关系

2NF:

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

若要分解为2NF,只需将不符合要求的拿出来,分为和

3NF:

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

若要分解为3NF,同样将不符合要求的拿出来,分为和

BCNF:

若R是,F是,候选码则是AC和AB,对于决定因素B不包含码,则不是BCNF

最小函数依赖集

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

  • 拆分右侧:类似把拆为和

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

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

    如,就可以删除ACD中的A

模式分解

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

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

判断无损连接的方法:

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

关系语言

关系代数语言

设有关系R或S

集合运算符

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

关系运算符

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

  • 选择:得到表中的指定行,写作条件表名

    如获取学号为1的行:

  • 投影:得到表中的指定列,写作条件表名

    如获取成绩这一列的信息:

  • 连接:将两个表根据指定条件连接在一起,写作表名条件表名

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

    例:A中包含属性x和y,B中包含属性y,且B中属性y的值为全集且无重复,则求全部y的x写作:

​ 如下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:将联系本身转换为一个关系模式,将双方的主码加入其中并设为外码,并将联系属性放入其中
赞助喵
非常感谢您的喜欢!
赞助喵