多值依赖(MVD)的定义
多值依赖(MVD)的定义
多值依赖(Multivalued dependency)是两个属性或属性集合之间相互独立的断言. 它是广义的函数依赖.
在某种意义上, 每个FD意味着一个相应的多值依赖. 但是仍然存在有不能用FD解释的属性集合相互独立的情况.
这里我们将说明引起多值依赖的原因和在数据库模式设计中如何使用多值依赖.
属性独立及随之产生的冗余
在设计关系模式时, 有时会有一些偶然的情况, 即某个模式属于 BCNF, 但在相应的关系中还有与 FD 无关的冗余存在.
在 BCNF 模式中最常见的导致冗余的情形是试图把键的两个或多个集合值属性置于同一个关系中.
例 3.28
本例中, 主要存储的对象是影星. 假设影星有多处地址, 地址包括街道(street)和城市(city)两部分.
地址集合(street and city)是关系要存储的一个集合值属性子集.
另一个要存储的集合值属性子集是该影星出演电影的名称(title)和发行年份(year).
关系的模式和所包含的函数依赖关系
因此此关系的模式是 $R(name, street, city, title, year)$
函数依赖集合为空集, 因为不存在非平凡的函数依赖. (注意 $street\not\rightarrow city$, $title\not\rightarrow year$.)
因此关系不存在BCNF违例, 但是数据明显有冗余.
namestreetcitytitleyear
C. Fisher
123 Maple St.
Hollywood
Star Wars
1977
C. Fisher
5 Locust Ln.
Malibu
Star Wars
1977
C. Fisher
123 Maple St.
Hollywood
Empire Strikes Back
1980
C. Fisher
5 Locust Ln.
Malibu
Empire Strikes Back
1980
C. Fisher
123 Maple St.
Hollywood
Return of the Jedi
1983
C. Fisher
5 Locust Ln.
Malibu
Return of the Jedi
1983
表中给出了 Carrie Fisher 的两个假设的地址和她的三部著名的电影. 没有理由只把某个地址和某部影片关联, 而不与另一部影片关联. (除非特别指明她在拍某部电影时, 一直住在其中某个地址.)
因此, 表达影星的地址和电影相互独立的唯一途径是把地址和电影的各种组合(这里总共是 $2\times 3=6$ 种)都罗列出来. 但是这样的组合明显包含数据冗余.
该关系的键是由所有五个属性构成的唯一的键: $(\underline{name}, \underline{street}, \underline{city}, \underline{title}, \underline{year})$.