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的所有关系实例均要满足的约束条件。 例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立
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。
原文链接:https://www.f2er.com/javaschema/286750.html
七、设有关系模式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 }。