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

首页






其他高级设计语言
UML(Unified Modeling Language)
ODL(Object Definition Language)


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.

“Operational Database Management Systems” (ODBMS)

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 概述

ODL 概述

一个类的声明包括:

类的定义

类的定义

class <name> {
<list of element declarations, separated
by semicolons>
}

属性和联系的声明(Attribute and Relationship Declarations)

属性和联系的声明(Attribute and Relationship Declarations)

属性(通常)是指带有某种(不涉及类的)类型的元素.

attribute <type> <name>;

联系(relationships)连接某个对象到从属于某个类的一个或多个对象.

relationship <type> <name>
inverse <relationship>;

反向联系(Inverse Relationships)

反向联系(Inverse Relationships)

假设类 C 有一个联系(relationship) R连接CD.

于是类 D 必存在到类 C 的某个联系 S.

RS 必须是真正的逆. 如果对象 d 经由联系 R 连接到对象 c, 则 c 必定经 S 连接到 d.

例子: 属性和联系

例子: 属性和联系

class Bar {
attribute string name;
attribute string addr;
relationship Set<Beer> serves inverse Beer::servedAt;
}
class Beer {
attribute string name;
attribute string manf;
relationship Set<Bar> servedAt inverse Bar::serves;
}

The type of relationship serves is a set of Beer objects.

The :: operator connects a name on the right to the context containing that name, on the left.

但是我们不能交换 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.