多值依赖

2025年1月10日 | 阅读 3 分钟
  • 当表中的两个属性彼此独立,但都依赖于第三个属性时,就会发生多值依赖。
  • 多值依赖至少包含两个属性,它们依赖于第三个属性,因此它至少需要三个属性。
  • 多值依赖是第一范式 (1NF) 的结果,而第一范式不允许元组中的属性拥有一个值集。
  • 在关系中,函数依赖 A -> B 将 A 的值与 B 的值关联起来,而多值依赖 A ->-> B 表示一种关系,该关系定义了属性 B 由单个 A 值确定的关系。多值依赖是第一范式(禁止属性具有值集)的结果。

示例:假设有一家自行车制造商,每年生产两种颜色的自行车(白色和黑色)。

BIKE_MODELMANUF_YEARCOLOR
M20112008白色
M20012008黑色
M30012013白色
M30012013黑色
M40062017白色
M40062017黑色

在此,COLOR 和 MANUF_YEAR 列都依赖于 BIKE_MODEL,并且彼此独立。

在这种情况下,这两列可以称为多值依赖于 BIKE_MODEL。这些依赖关系的表示如下所示:

这可以读作“BIKE_MODEL 多值确定 MANUF_YEAR”和“BIKE_MODEL 多值确定 COLOR”。

多值依赖可以定义为:

当一个表中,关于某个属性的两个或多个独立的、多值的事实同时出现时,就会发生多值依赖。

换句话说,在一个关系 R(X, Y, Z) 中,假设 X、Y、Z 是两两不相交的。

X = {x1, x2 …………….. xn)

Y = { y1, y2 ……………..yn)

Z = { z1, z2 …………….. zn)

那么,如果多值依赖 X ->->Y 在任何时间点都成立,那么 Yxz 仅取决于 X,即 Yxz = Yxz,并且对于每个 x、y 和 z 值,两者都非空。

再举一个 STAFF 关系的例子,该关系保存有关员工、他们分配的设备以及他们流利的语言的信息,如下所示:

STAFF 关系:STAFF (@S_Name + @Equipment + @Language)

S_Name设备语言
AnuragPC英文
AnuragPC法语
Anurag大型机英文
Anurag大型机法语
KapilPC英文
KapilPC法语
KapilPC日本人

我们假设一个员工对于设备和语言都可以有多个值。员工的设备和语言属性彼此独立,因此我们必须为员工的设备和员工的语言的每种组合创建一个单独的元组。因此,一个员工拥有关于其设备和语言的多值事实,或者换句话说,员工多值确定设备和语言。

它可以表示为

因此,设备和语言多值依赖于员工。

多值依赖的性质

多值依赖具有以下性质:

  • 为了使关系保持多值依赖,它必须至少有三个属性。因为多值依赖总是成对出现,即 A->->C 在关系 R(A, B, C) 中也成立。
  • 产生多值事实的属性必须彼此独立。
  • 函数依赖是多值依赖的一个特例。如果我们把多值依赖确定的集合限制为单个集合,那么多值依赖就归结为函数依赖。
 
下一主题DBMS 连接依赖