Home 数据库学习四 关系数据库理论
Post
Cancel

数据库学习四 关系数据库理论

关系模式

一个关系模式应当是一个五元组 (含关系名)

R<U, D, dom, F>

  1. R 为关系名,它是符号化的元组语义
  2. U 为一组属性
  3. 属性组 U 中的属性来自域 D
  4. dom 为属性列表到域的映射
  5. F 为属性组 U 上的一组数据依赖 (函数依赖)

由于第三点与第四点对模式设计关系不大,因此通常把关系模式看作是一个三元组:R<U, F>,当且仅当 U 上的一个关系 r 满足 f 时,r 称为关系模式 R<U, F> 的一个关系

例如:R 为成绩表,U 为 (学号,姓名,课程号,成绩),F 为 {学号 → 姓名,课程号 → 课程名,(学号,课程号) → 成绩}

函数依赖

函数依赖是一种最重要、最基本的数据依赖

设 R(U) 是属性集 U 上的关系模式,X、Y 是 U 的子集。若对 R(U) 的任何一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等,而在 Y 上的属性值不等,则称 X 函数决定 Y 或 Y 函数依赖于 X。记作 X → Y

  • 非平凡的函数依赖

如果 X → Y,但 Y ⊈ X,则称 X → Y 是非平凡的函数依赖。一般情况下,总是讨论非平凡的函数依赖

  • 平凡的函数依赖

如果 X → Y,但 Y ⊆ X,则称 X → Y 是平凡的函数依赖

  • 完全函数依赖

在 R(U) 中,如果 X → Y,并且对于 X 的任何一个真子集 X’ 都有 X’ 不能决定 Y,则称 Y 对 X 完全函数依赖,记作 X -F-> Y

  • 部分函数依赖

如果 X → Y,但 Y 不完全函数依赖于 X,则称 Y 对 X 部分函数依赖,记作 X -P-> Y。部分函数依赖也称为局部函数依赖

  • 传递依赖

在 R(U, F) 中,如果 X → Y,Y ⊈ X,Y → Z,则称 Z 对 X 传递依赖


参考:Untitled Document (pop0726.github.io)

设 K 为 R(U, F) 中属性的组合,若 K → U,且对于 K 的任何一个真子集 K’ 都有 K’ 不能决定 U,则 K 为 R 的候选码。若有多个候选码,则选一个作为主码。候选码通常也称为候选键,或者候选关键字

  • 主属性和非主属性

包含在任意一个候选码中的属性称为主属性,否则称为非主属性

  • 外码

若 R(U) 中的属性或属性组 X 非 R 的码,但 X 是另一个关系的码,则称 X 为外码

  • 超码

能表示出所有属性的集合,候选码是最小的超码

  • 全码

所有的属性都是主码

函数依赖的公理系统 (Armstrong 公理系统)

设关系模式 R(U, F),其中 U 为属性集,F 是 U 上的一组函数依赖,那么有以下 推理规则

  1. 自反律:若 Y ⊆ X ⊆ U,则 X → Y 为 F 所蕴涵
  2. 增广律:若 X → Y 为 F 所蕴涵,且 Z ⊆ U,则 XZ → YZ 为 F 所蕴涵
  3. 传递律:若 X → Y,Y → Z 为 F 所蕴涵,则 X → Z 为 F 所蕴涵

根据上述三条推理规则又可推出下述三条推理规则

  • 合并规则:若 X → Y,X → Z,则 X → YZ 为 F 所蕴涵
  • 伪传递律:若 X → Y,WY → Z 为 F 所蕴涵,则 XW → Z 为 F 所蕴涵
  • 分解规则:若 X → Y,Z ⊆ Y,则 X → Z 为 F 所蕴涵

属性闭包计算

闭包计算即找出候选码,如何选出候选码?

  1. 只出现在左边的一定是候选码
  2. 只出现在右边的一定不是候选码
  3. 左右都出现的不一定
  4. 左右都不出现的一定是候选码
  5. 再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码,否则,你要把每一个可能的值放进当前确定的候选码里面进行求闭包

例如:

R<U, F>,U(A, B, C, D, E, G) F = {AB → C, CD → E, E → A, A → G}, 求候选码

1)只出现在左边:B, D 一定是候选码 2)只出现在右边:G 一定不是候选码 3)左右都出现的:A,C,E 不一定是候选码 5)求闭包

BD → 啥也推不出来,所以要把每一个可能的求闭包 (BDA)+ :可推出C,E,A,G 所以可以推出ABCDEG (BDC)+ :可推出E,A,G 所以可以推出ABCDEG (BDE)+ :可推出A,G,C 所以可以推出ABCDEG

所以,它的候选码最终是{(BDA),(BDC),(BDE)}

求最小函数依赖集

如何求最小依赖集? 1)拆右边为多个元素的(比如A->BC 拆为 A->B和A->C) 2)出去当前元素,求它的闭包,把集合里面所有元素都弄完 3)左边最小化(通过遮住元素来看能不能推出其他元素) 比如BCD,遮住B看能推出CD吗,遮住C看能推出BD吗,遮住D看能推出BC吗

例: 已知关系 R<U,F> U{A, B, C, D, E, F, G} F = {BCD->A, BC->E, A->F, F->G, C->D, A->G} 求F的最小依赖集

解:

// (1)

(BCD)+ = BCDED

(BC)+ = BCD

(A)+ = AG

(F)+ = F

(C)+ = C

(A)+ = AFG(删除,因为有G)

// (2)

BCD->A —> BC->A

BC->E

A->F

F->G

C->D

This post is licensed under CC BY 4.0 by the author.

数据库学习三 SQL 语言

数据库学习五 范式