of {$slidecount} ½ {$title} ATZJG.NET {$author}

首页






SQL Authorization
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)的类, 其对象永久存储在数据库中.

多值依赖 $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$.

分裂规则不再成立(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

但是我们不能交换 areaCodephone 中的值, 因此对于这个关系,
$\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$ 是超键.

BCNF 对比 4NF

BCNF 对比 4NF

关系

Decomposition and 4NF

Decomposition and 4NF

例子: 4NF 分解

例子: 4NF 分解

Drinkers(name,addr,phones,beersLiked)

FD: $\text{name}\rightarrow\text{addr}$

MVD:

例子: 4NF 分解 -- (2)

例子: 4NF 分解 --(2)

利用 $\text{name}\rightarrow\text{addr}$ 对原关系 Drinkers进行分解.

  1. Drinkers1(name,addr)
    • 在 4NF 中, 仅有的函数依赖是 $\text{name}\rightarrow\text{addr}$.
  2. 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 分解为:

MVD's+FD's 的原因

MVD's+FD's 的原因

问题: 对于关系 R, 给定 MVD 集合和 FD 集合. 某个 FD 或某个 MVD 是否也在 R 上成立.

解决办法: 利用图例去发现给定集合的所有推断, 去检查是否可以推断出目标依赖.

为什么我们要关注

为什么我们要关注

  1. 4NF 技术上需要一个 MVD 违例.
    • 需要从给定的 FD's 和 MVD's(它们可能自身并不违反 4NF)去推断违反 4NF 的 MVD's
  2. 当我们分解时, 我们需要将 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$.

$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$ 上取值相同的两行,

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.