数据库系统之关系数据理论——多值依赖到底是什么
⾃⼰在家捣⿎了很久还是没弄明⽩什么是多值依赖,今天⽹课⽼师留了题“举出三个多值依赖的例⼦”,最后看了⽼师的例⼦,听了讲解,终于弄明⽩了怎么判断,怎么举例,什么是多值依赖。
先放上多值依赖的定义:
设R(U)是属性集U上的⼀个关系模式。X,Y,Z是U的⼦集,并且Z=U-X-Y。关系R(U)中多值依赖X→→Y成⽴,当且仅当对R(U)的任⼀关系r,给定的⼀对(x,z)值,有⼀组Y的值,这组值仅仅决定于x的值⽽与z值⽆关。
看概念是很抽象⽣硬,不便于理解的,通过⼏个例⼦来让我们进⾏最通俗的讲解。
生活中数据库系统的实际例子例1:
MSC(M,S,C)中,M表⽰专业,S表⽰学⽣,C表⽰该专业必修课,假设每个专业有多个学⽣,有⼀组必修课,设同专业内所有学⽣选修的必修课相同。
实例如下,按照语义对于M的每⼀个值M,S有⼀个完整的集合对应,⽽不问C取何值,所以M→→S,由于C与S的完全对称性,必然有
M→→C成⽴。
  M      S      C
  M1      S1      C1
  M1      S1      C2
  M1      S2      C1
  M1      S2      C2
  ···        ···      ···
也就是说,⼀个专业对应若⼲个学⽣,他们之间的关系是⼀对多(1:n),是多值依赖M→→S;⼀个学⽣对应多个必修课,⽽⼀个必修课也对应多个学⽣,他们之间的关系是多对多(n:m);其实M与C没有直接关系,有的只是间接关系(借助C),只是因为C与S完全对称,所以可以推出专业和必修课也是多值依赖M→→C(⼀对多1:m)。
例2:
关系模式ISA(I,S,A)中,I表⽰学⽣兴趣⼩组,S表⽰学⽣,A表⽰某兴趣⼩组的活动项⽬。假设每个兴趣⼩组有多个学⽣,有若⼲活动项⽬,每个学⽣必须参加所在兴趣⼩组的所有活动项⽬,每个活动项⽬要求该兴趣⼩组的所有学⽣参加。
实例关系如下,按照语义对于I的每⼀个值I,S有⼀个完整的集合对应,⽽不问A取值如何,所以I→→S,由于S与A的完全对称性,必然有
I→→A成⽴。
  I      S      A
  I1      S1      A1
  I1      S1      A2
  I1      S2      A1
  I1      S2      A2
  ···      ···        ···
也就是说,⼀个兴趣⼩组I对应若⼲个学⽣S,他们是⼀对多的关系(1:n),是多值依赖I→→S;⼀个学⽣参加多个活动项⽬A,⽽⼀个活动项⽬⼜对应多个学⽣,他们之间的关系是多对多(n:m);其实I与A没有直接关系,有的只是间接关系(借助S),只是因为S与A完全对称,所以可以推出专业和必修课也是多值依赖I→→A(⼀对多1:m)。
例3:
关系模式RDP(R,D,P)中,R表⽰医院的病房,D表⽰护⼠,P表⽰病⼈。假设每个病房有若⼲护⼠看管,有若⼲病⼈,每个护⼠必须看管所在病房的所有病⼈,每个病⼈要求是要被所在病房的所有护⼠看管的。
实例关系如下,按照语义对于R的每⼀个值R,D有⼀个完整的集合对应,⽽不问P取值如何,所以R→→D,由于D与P的完全对称性,必然有R→→P成⽴。
  R      D      P
  R1      D1      P1
  R1      D1      P2
  R1      D2      P1
  R1      D2      P2
  ···      ···        ···
也就是说,⼀个病房R对应若⼲个护⼠D,他们是⼀对多的关系(1:n),是多值依赖R→→D;⼀个护⼠看护多个病⼈,⽽⼀个病⼈需要多个护⼠看护,他们之间的关系是多对多(n:m);其实R与P没有直接关系,有的只是间接关系(借助D),只是因为D与P完全对称,所以可以推出病房和病⼈之间也是多值依赖R→→P(⼀对多1:m)。
例4(课本上的经典例题):
关系模式WSC(W,S,C)中,W表⽰仓库,S表⽰保管员,C表⽰商品,假设每个仓库⼜若⼲名保管员,若⼲个商品,每个保管员保管所在仓库的所有商品,每种商品被所有保管员保管。
实例如下,按照语义对于W的每⼀个值W,S有⼀个完整的集合对应,⽽不问C取何值,所以W→→S,由于C与S的完全对称性,必然有
W→→C成⽴。
  W      S      C
  W1      S1      C1
  W1      S1      C2
  W1      S2      C1
  W1      S2      C2
  ···        ···      ···
也就是说,⼀个专业对应若⼲个学⽣,他们之间的关系是⼀对多(1:n),是多值依赖W→→S;⼀个学⽣对应多个必修课,⽽⼀个必修课也对应多个学⽣,他们之间的关系是多对多(n:m);其实M与C没有直接关系,有的只是间接关系(借助C),只是因为C与S完全对称,所以可以推出专业和必修课也是多值依赖W→→C(⼀对多1:m)。
其实还有⼀种⽅法可以判断是否该关系模式存在多值依赖:
以例3为例,到属性W相同值和属性S不同值的任意两个元组,交换他们的S值,重新组成的新元组如果都可以在这个表内到,那么就存在多值依赖。⽐如取第⼀⾏和第四⾏,将这两⾏的S1和S2互换,得到新元组(W1,S2,C1)和(W1,S1,C2),我们发现这两个元组在原表内都存在(在第⼆⾏和第三⾏),其他的也是这样,那么该关系模式就存在多值依赖。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。