首页
Privileges
Grant and Revoke
Grant Diagrams
Haifeng Xu
(hfxu@yzu.edu.cn)
This slide is based on Jeffrey D. Ullman's work, which can be download from his website.
面向对象的 DBMS
面向对象的 DBMS
Standards group: ODMG=Object Data Management Group.
ODL=Object Definition Language. 与 SQL 中的 CREATE TABLE 类似.
OQL=Object Query Language. 试图将 SQL 移植到 OO 框架中.
Framework - (1)
Framework - (1)
ODMG 希望 OO-DBMS 的供应商能够提供像 C++ 那样的面向对象的语言, 并具有扩展(OQL), 使得程序员可以在数据库和“宿主语言”之间进行数据的无缝传输.
Framework - (2)
Framework - (2)
ODL 是用于定义持久化(persistent)的类, 其对象永久存储在数据库中.
- ODL 类看上去像二元联系中的实体集, 只不过含有方法(methods).
- ODL 类的定义是扩展的面向对象宿主语言的一部分.
多值依赖 $X\rightarrow\rightarrow Y$ 的图解
多值依赖 $X\rightarrow\rightarrow Y$ 的图解
MVD 的规则
MVD 的规则
每个函数依赖是在某种意义上是一个多值依赖(MVD).
互补(Complementation): 若 $X\rightarrow\rightarrow Y$, $Z$ 是剩下所有属性构成的属性集, 即 $Z=R-X-Y$. 则 $X\rightarrow\rightarrow Z$.
- 互补规则实际上是因为 $Y$ 和 $Z$ 的地位是相等的.
分裂规则不再成立(Splitting Doesn't Hold)
分裂规则不再成立(Splitting Doesn't Hold)
与 FD 一样, 对于 MVD, 我们不能将它的左边分裂.
但与 FD 不同, 对于 MVD, 我们同样不能分裂右边. 有时我们必须在右边保持若干属性.
例子: 右侧是多属性集(Multiattribute Right Sides)
例子: 右侧是多属性集(Multiattribute Right Sides)
Drinkers(name,areaCode,phone,beersLiked,manf)
一个酒客可以有多个固定电话号码, 每个固定电话号码可以分解为"区号+电话号码"(areaCode phone).
一个酒客可以喜欢几种啤酒, 每种啤酒的生产厂家都不同.
由于 areaCode phone 组合独立于 beersLiked manf 组合, 因此我们有下面的多值依赖:
$\text{name}\rightarrow\rightarrow\text{areaCode phone}$
$\text{name}\rightarrow\rightarrow\text{beersLiked manf}$
例子数据
例子数据
下面的数据满足多值依赖的定义:
name |
areaCode |
phone |
beersLiked |
manf |
Sue |
650 |
555-1111 |
Bud |
A.B. |
Sue |
650 |
555-1111 |
WickedAle |
Pete's |
Sue |
415 |
555-9999 |
Bud |
A.B. |
Sue |
415 |
555-9999 |
WickedAle |
Pete's |
但是我们不能交换 areaCode 或 phone 中的值, 因此对于这个关系,
$\text{name}\rightarrow\rightarrow\text{areaCode}$ 和
$\text{name}\rightarrow\rightarrow\text{phone}$ 均不成立.
第四范式(Fourth Normal Form)
第四范式(Fourth Normal Form)
符合 BCNF 的数据库模式, 如果有多值依赖存在, 则其中的数据冗余是不能去除的.
有一个更强的范式, 称为 4NF. 它在进行数据库模式分解时, (直观地)把 MVD 当作 FD; 但在决定关系的键时, 则不这样直接对待.
4NF 的定义
4NF 的定义
关系 R 称为是 4NF 的, 如果满足:
只要存在非平凡的多值依赖 $X\rightarrow\rightarrow Y$, 则 $X$ 是超键.
- 回忆: $X\rightarrow\rightarrow Y$ 是非平凡的 MVD 是指:
- $Y$ 不是 $X$ 的一个子集.
- $X$, $Y$ 不包括所有的属性.
- 注意到超键的定义仍然仅依赖于 FD.
BCNF 对比 4NF
BCNF 对比 4NF
关系
Decomposition and 4NF
Decomposition and 4NF
例子: 4NF 分解
例子: 4NF 分解
Drinkers(name,addr,phones,beersLiked)
FD: $\text{name}\rightarrow\text{addr}$
MVD:
- $\text{name}\rightarrow\rightarrow\text{phones}$
- $\text{name}\rightarrow\rightarrow\text{beersLiked}$
- 键是 {name,phones,beersLiked}
- 所有依赖违反了 4NF.
例子: 4NF 分解 -- (2)
例子: 4NF 分解 --(2)
利用 $\text{name}\rightarrow\text{addr}$ 对原关系 Drinkers进行分解.
- Drinkers1(name,addr)
- 在 4NF 中, 仅有的函数依赖是 $\text{name}\rightarrow\text{addr}$.
- Drinkers2(name,phones,beersLiked)
- 这个子关系不属于 4NF. 因为有多值依赖 $\text{name}\rightarrow\rightarrow\text{phones}$ 和 $\text{name}\rightarrow\rightarrow\text{beersLiked}$ 存在. 并且没有函数依赖, 因此所有这三个属性构成了这个子关系的键.
例子: 分解子关系 Drinkers2
例子: 分解子关系 Drinkers2
刚才两个 MVD $\text{name}\rightarrow\rightarrow\text{phones}$ 和 $\text{name}\rightarrow\rightarrow\text{beersLiked}$ 告诉我们要将关系 Drinkers2 分解为:
- Drinkers3(name,phones)
- Drinkers4(name,beersLiked)
MVD's+FD's 的原因
MVD's+FD's 的原因
问题: 对于关系 R, 给定 MVD 集合和 FD 集合. 某个 FD 或某个 MVD 是否也在 R 上成立.
解决办法: 利用图例去发现给定集合的所有推断, 去检查是否可以推断出目标依赖.
为什么我们要关注
为什么我们要关注
- 4NF 技术上需要一个 MVD 违例.
- 需要从给定的 FD's 和 MVD's(它们可能自身并不违反 4NF)去推断违反 4NF 的 MVD's
- 当我们分解时, 我们需要将 FD's+MVD's 作投影.
例子: 追踪含有 MVD's+FD's 的图例
例子: 追踪含有 MVD's+FD's 的图例
为应用 FD, 和以前一样, 要使得符号相等.
To apply an MVD, generate one or both of the tuples we know must also be in the relation represented by the tableau.
我们将证明: 如果有多值依赖 $A\rightarrow\rightarrow BC$ 和函数依赖 $D\rightarrow C$, 则可推断出 $A\rightarrow C$.
$A\rightarrow C$ 的图例
$A\rightarrow C$ 的图例
目标是证明: $c_1=c_2$.
例子: MVD 的传递规则(Transitive Law for MVD's)
例子: MVD 的传递规则(Transitive Law for MVD's)
若 $A\rightarrow\rightarrow B$ 且 $B\rightarrow\rightarrow C$, 则 $A\rightarrow\rightarrow C$.
- 如果数据库模式是 $ABC$, 则根据多值依赖的互补规则, 上面的断言显然成立.
- 但这个断言对于其他数据模式也是成立的. 比如我们考虑关系 $R(ABCD)$.
$A\rightarrow\rightarrow C$ 的图例
$A\rightarrow\rightarrow C$ 的图例
目标: 推断存在元组 $(a, b_1, c_2, d_1)$.
推断 MVD's+FD's 的规则
推断 MVD's+FD's 的规则
从一个具有两行的图例来说明.
- 这些行在要推断的依赖的左边属性集上取值是一致的.
- 并且它们在其他属性集上不一致.
- 对于取值一致的, 用没有下标的字母表示, 如果不一致则使用下标.
推断: 应用函数依赖(Inference: Applying a FD)
推断: 应用函数依赖(Inference: Applying a FD)
应用函数依赖 $X\rightarrow Y$. 找出在属性集 $X$ 上一致的行, 迫使它们在属性集 $Y$ 上取值也一致.
- 将一个变量用另一个替代.
- 若被替换的变量是目标元组的一部分, 则也替换.
推断: 应用多值依赖(Inference: Applying a MVD)
推断: 应用多值依赖(Inference: Applying a MVD)
应用多值依赖 $X\rightarrow\rightarrow Y$. 对于在属性集 $X$ 上取值相同的两行,
- 在图例中加入那些通过交换此两行在 $Y$ 部分而得到那些行.
- 实际上, 就是将 $Y$ 属性组和剩余属性组 $R-X-Y$ 上的值作笛卡尔积.
Inference: Goals
Inference: Goals
为测试 $U\rightarrow V$ 是否成立, 我们接着察看 $V$ 属性组上的两个变量是否相同.
如果我们测试的是多值依赖 $U\rightarrow\rightarrow V$, 我们察看图例中的一行是否是原来的那行, 即是通过交换属性组 $V$ 上的值得到的.
Inference: Endgame
Inference: Endgame
应用所有给定的 FD's 和 MVD's, 直到我们不再改变图例为止.
如果我们达到目的, 则依赖性被推出.
否则, 所得到的最后的图例是一个反例.
- 它满足所有给定的依赖关系.
- 最初的两行违反目标依赖.
End
Thanks very much!
This slide is based on Jeffrey D. Ullman's work, which can be download from his website.