数据库系统之关系数据理论——多值依赖到底是什么

自己在家捣鼓了很久还是没弄明白什么是多值依赖,今天网课老师留了题“举出三个多值依赖的例子”,最后看了老师的例子,听了讲解,终于弄明白了怎么判断,怎么举例,什么是多值依赖。

先放上多值依赖的定义:

设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:

关系模式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),我们发现这两个元组在原表内都存在(在第二行和第三行),其他的也是这样,那么该关系模式就存在多值依赖。

猜你喜欢

转载自www.cnblogs.com/guojiaxue/p/12695173.html