FD函数依赖

前端之家收集整理的这篇文章主要介绍了FD函数依赖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

fd

  FD(functional dependency):在数据库系统中,设有关系模式R或简记为R,X,Y是U的子集,r是R的任一具体关系, 如果对r的任意两个元组t1,t2,由t1[X]=t2[X]导致t1[Y]=t2[Y],则称 X函数决定Y ,或Y函数依赖于X, 记为X→Y。 X→Y为模式R的一个函数依赖。

:某个属性决定另一个属性时,称另一属性依赖于该属性比如在设计学生表时,一个学生的学号能决定学生的姓名,也可称姓名属性依赖于学号,对于现实来说,就是如果知道一个学生的学号,就一定能知道学生的姓名,这种情况就是姓名依赖于学号,这就是函数依赖函数依赖又分为非平凡依赖,平凡依赖,多值依赖。从性质上还可以分为部分依赖,完全依赖两种。

概念

  1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
  2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。
  例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立
  3. 数据库设计者可以对现实世界作强制的规定。例如规定不允许同名人出现,函数依赖“ 姓名 年龄 ”成立。所插入的元组必须满足规定的函数依赖,若发现有同名人存在, 则拒绝装入该元组。

函数依赖与属性关系

  属性之间有三种关系,但并不是每一种关系都存在函数依赖。设R(U)是属性集U上的关系模式,X、Y是U的子集:
   ● 如果X和Y之间是1:1关系(一对一关系),如学校和校长之间就是1:1关系,则存在函数依赖X → Y和Y →X。
  ● 如果X和Y之间是1:n关系(一对多关系),如年龄和姓名之间就是1:n关系,则存在函数依赖Y → X。
  ●如果X和Y之间是m:n关系(多对多关系),如学生和课程之间就是m:n关系,则X和Y之间不存在函数依赖。

案例分析

  例: Student(Sno,Sname,Ssex,Sage,Sdept)
  假设不允许重名,则有:
  Sno → Ssex, Sno → Sage,Sno → Sdept,
  Sno ←→ Sname,Sname → Ssex, Sname → Sage
  Sname → Sdept
  但Ssex -\→ Sage
  若 X → Y,并且 Y → X,则记为 X ←→ Y。
  若 Y 不函数依赖于 X,则记为 X -\→ Y。

七、设有关系模式R(职工名,项目名,工资,部门名,部门经理),如果规定每个职工可参加多个项目,各领一份工资;每个项目只属于一个部门管理;每个部门只有一个经理。

1.试写出关系模式R的基本函数依赖和所有的候选码。

2.说明R不是2NF模式的理由,并把R分解成2NF模式集。

3.进而把R分解成3NF模式集,并说明理由。

七、解:1.R的基本FD有三个:

(职工名,项目名)®工资

项目名®部门名

部门名®部门经理

候选码为(职工名,项目名)。

2.根据1),R中存在下列两个FD:

(职工名,项目名)®(部门名,部门经理)

项目名®(部门名,部门经理)

R应分解成两个模式: R1(项目名,部门名,部门经理)

R2(职工名,项目名,工资)

R1和R2都是2NF模式。

3.R2已是3NF模式。

在R1中,由于存在两个FD:

项目名®部门名

部门名®部门经理

即存在一个传递依赖。

对R1应分解成两个模式:R11(项目名,部门名),R12(部门名,部门经理)。因此,R分解成3NF模式集时,ρ={ R11,R12,R2 }。

原文链接:https://www.f2er.com/javaschema/286750.html

猜你在找的设计模式相关文章