精华内容
下载资源
问答
  • 轻松理解数据库必须掌握的数据依赖关系。

    我们先复习下什么是函数函数是发生在集合之间的一种对应关系(我喜欢用图理解)

    图中表示的是函数中的单射、满射和双射。简而言之就是集合的对应关系,而集合中的值一般满足一对一和多对一的关系,不能存在一对多的关系。


    基于上述对函数的理解,我们给出函数依赖的定义:

    设R(U)是属性集U上的关系模式,X,Y是U的子集,若对R(U)的任意一个可能的关系r,r中不可能存在两个元祖在X上的属性值相等,而在Y中的属性值不等,则记为X→Y。简而言之,函数依赖是某个属性集决定另一个属性集时,称另一属性集依赖于该属性集。(事实上就是不能出现一对多的关系)

    我们先区分函数依赖与属性集中属性的三种关系

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

    用数学上的映射关系来理解,比如f(x)=2x;f(x,y)=x^+2y;f(x,y,z)=x+y-z等等,函数中变量元对应U中的X,所有X中的确定值经过函数关系的运算后组成Y。

    其次,函数依赖包括以下几种

    1.平凡函数依赖

    当关系中属性集合Y是属性集合X的子集时,存在函数依赖X→Y,即一组属性函数决定它的所有子集,这种函数依赖称为平凡函数依赖。

    2.非平凡函数依赖

    当关系中属性集合Y不是属性集合X的子集时,存在函数依赖X→Y,则称这种函数依赖为非平凡函数依赖。

    3.完全函数依赖

    设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

    4.部分函数依赖

    设X,Y是关系R的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

    5.传递函数依赖

    设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。(如果Y→X,则X→Z成立了)

    用一个例子来理解上述的定义(A—\ →B表示A 不函数依赖于 B)


    表1——学生(学号, 姓名, 性别, 年龄, 学院) 

    假设我们做表不允许重名

    学号→ 性别, 学号 → 年龄, 学号→ 学院,学号←→ 姓名,,姓名→ 性别, 姓名→ 年龄,姓名→ 学院,但性别—\ →Sage

    -----------------------------------------------------------------------------------------------------------------

    表2——学生课程(学号,课程,成绩)

    学号→课程,(学号,课程)→成绩

    -----------------------------------------------------------------------------------------------------------------

    表3——学院系(学号,系名,系主任)

    学号 → 系名,系名 → 系主任


    在上述例子中:

    平凡函数依赖: (学号,课程)→学号,(学号,课程)→课程。

    因为学号和课程都是(学号,课程)的子集。

    非平凡函数依赖: (学号,课程)→成绩(数据库中讨论得比较多是非平凡函数依赖,而平凡意义不大)

    因为成绩不是(学号,课程)的子集。

    部分函数依赖:(学号,姓名)→ 性别 

    因为(学号,姓名)→ 性别 且 学号 → 性别

    完全函数依赖:(学号,课程号)→ 成绩 

    因为(学号,课程号)→ 成绩,学号 —\→ 成绩,课程号 —\→ 成绩。

    传递函数依赖: 学号 → 系主任 

    因为学号 → 系名,系名 → 系主任 且 系名 —\→ 学号。

    而多值依赖呢?给出定义

    多值依赖的定义:
          设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
          若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

    依然用函数的映射关系来理解,引入f(x,y),假设f(x,y)=+-(x^),若z=f(x,y),则一个x值可以得出两个互为相反数的z。在这个二元函数关系中,y的取值事实上是不影响结果的。类比到关系模式上,即x为X集的属性值,y为Y集的属性值,z为Z集的属性值。

    看看一个例子

    (课程C) ——(教师T)—(参考书B)

     数据库概率 —顾国生老师——数学分析
     数据库概率 —顾国生老师——高等代数
     数据库概率 —顾国生老师——微分方程

    上述例子U{C,T,B},其中课程C和教师T唯一确定一组B,却与T无关,经由C决定,然而T并不是空集,所以是非平凡的多值依赖。

    事实上,当T为空的时候,如果C中的每一个值c对应B中的一个确定的值,则变为函数依赖,所以函数依赖是多值依赖的一种特殊情况。


    总计下:

    1. 函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。

    2. 函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。(例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立)

    3. 函数依赖通常以集合抽闲出来讨论。

    4. 数据库设计者根据需求对函数关系进行制定。例如认为“姓名→年龄”在特定表中可行。

    5. 数据库设计者根据现实规定做强制要求。例如规定不允许同名人出现,函数依赖“姓名→年龄”成立。所插入的元组必须满足规定

    的函数依赖,若发现有同名人存在, 则拒绝装入该元组。




    展开全文
  • 函数依赖多值依赖

    千次阅读 2019-03-13 09:49:12
    一、函数依赖(Functional Dependency)的概念 函数依赖是数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。 设R(U)是属性U上的一个关系模式,X和Y均为U={A1,A2,…,...
    一、函数依赖(Functional Dependency)的概念
    
    函数依赖是数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。
    
    设R(U)是属性U上的一个关系模式,X和Y均为U={A1,A2,…,An}的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X→Y。
    
    简单的说就是在属性U上有两个子集属性X,Y,由X属性可以获得一个元组,而X属性对应的Y属性获得相同的元组
    
    例:
    
    (sno-学生ID,tno-教师ID,cno-课程ID,sname-学生姓名,tname-教师姓名,cname-课程名称,grade-成绩)
    1、sno→sname, cno→cname,(sno,cno)→grade √
    2、sname→sno, tno→cno, sno→tname × (不存在一一对应关系)
    
    
    
    函数依赖是语义范畴 
    
    1、语义:数据所反映的现实世界事物本质联系
    2、根据语义来确定函数依赖性的存在与否
    3、函数依赖反映属性之间的一般规律,必须在关系模式下的任一个关系r中都满足约束条件。
    
    
    
    属性间的联系决定函数依赖关系 
    
    设X、Y均是U的子集
    1、X和Y间联系是1:1,则X→Y,Y→X。(相互依赖,可记作X←→Y)
    2、X和Y间联系是M:1(M), 则X→Y。
    3、X和Y间联系是M:N(M,N),则X、Y间不存在函数依赖。
    
    
    
    完全函数依赖和部分函数依赖 
    
    1、函数依赖分为完全函数依赖和部分函数依赖
    
    2、定义:
    在R(U)中,如果X→Y,并且对于X的任何真子集X’都有X’-/->Y’,则称Y完全依赖于X,记作X→Y;否则,如果X→Y,且X中存在一个真子集X’,使得X’→Y成立,则称Y部分依赖于X。
    
    例:
    
    学生ID,学生姓名,所修课程ID,课程名称,成绩
    
    (学生ID,所修课程ID)→成绩
    
    成绩既不能单独依赖于学生ID,也不能单独依赖于所修课程ID,因此成绩完全函数依赖于关键字。
    
    (学生ID,所修课程ID)→学生姓名
    
    学生ID→学生姓名
    
    学生姓名可以依赖于关键字的一个主属性——学生ID,因此学生姓名部分函数依赖于(学生ID,所修课程ID)。
    
    平凡函数依赖和非平凡函数依赖 
    
    设X,Y均为某关系上的属性集,且X→Y
    1)若Y包含于X,则称X→Y为:平凡函数依赖;
    2)若Y不包含于X,则称X→Y为:非平凡函数依赖。
    Y包含于X内,W于X相交,与Y无直接交集。
    
    则:X→Y为平凡函数依赖
    
    X→W, W→Y为非平凡函数依赖
    
     函数依赖的逻辑蕴涵
    
    设有关系模式R(U)及其函数依赖集F, 如果对于R的任一个满足F的关系r函数依赖X→Y都成立,
    则称F逻辑蕴涵X→Y,或称X→Y可以由F推出。
    例4.3.1:
    关系模式 R=(A,B,C),函数依赖集F={A→B,B→C}, F逻辑蕴涵A→C。
    
    函数依赖的性质
    
    若U为关系模式R的属性全集,F为U上的一组函数依赖,设X、Y、Z、W均为R的子集,对R(U,F)有:
    F1(自反性):若X≥Y(表X包含Y),则X→Y为F所蕴涵;(F1′:X→X)
    F2(增广性): 若X→Y为F所蕴涵,则XZ→YZ为F所蕴涵;(F2′:XZ→Y)
    F3(传递性): 若X→Y,Y→Z为F所蕴涵,则X→Z为F所蕴涵;
    
    F4(伪增性):若X→Y,W≥Z(表W包含Z)为F所蕴涵,则XW→YZ为F所蕴涵;
    F5(伪传性): 若X→Y,YW→Z为F所蕴涵, 则XW→Z为F所蕴涵;
    
    F6(合成性): 若X→Y,X→Z为F所蕴涵,则X→YZ为F所蕴涵;
    F7(分解性): 若X→Y,Z≤Y (表Z包含于Y)为F所蕴涵,则X→Z为F所蕴涵。
    
    函数依赖推理规则F1∽F7都是正确的。
    
    
    
    多值依赖的定义:
    
       设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
    
          若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。
    
    平凡多值依赖就是,属性集合中分为两个真子集,每一个X对应一组Y的取值
    
    可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。
    
    如下表:
    
    课程C                                   教师T                              参考书B
    
    数学                                      邓军                                数学分析
    
    数学                                      邓军                                高等代数
    
    数学                                      邓军                                微分方程
    
    
    
    表中,U = C+T+B,(C,T)确定一组B,但是这组B其实与T无关,仅由C确定,所以(C,T)->->B。又因为T不是空集,所以(C,T)->->B为非平凡多值依赖。
    
    要想消除多只依赖,可以分解为:(C,T), (C,B)及
    
    表1:
    
    课程C                  教师T
    
    数学                     邓军
    
    
    
    表2:
    
    
    
    课程C                    参考书B
    
    数学                      数学分析
    
    数学                      高等代数
    
    数学                      微分方程
    
    
    
    对于R中的每个非平凡多值依赖X->->Y(Y不属于X),X都含有候选码,则R属于4NF。
    
    分析:对于每一个非平凡多值依赖X->->Y,X若含有候选码,也就是X->Y,所以4NF所允许的非平凡多值依赖是函数依赖。
    
    多值依赖的性质:
    
    若 X->->Y , 则 X->->Z  多值依赖对称性
    
    若X->Y.则X->->Y   说明函数依赖是多值依赖的特殊情况,当X->Y的时候,对于每一个X都有一个Y与之对应,那么对于每一对X,Z都有一组Y与之对应
    
    设属性值之间有包含关系 XY包含于W包含于U 那么如果R(U)上有X->->Y,那么在R(W)上一世成立的
    
    若X->->Y 在R(U)上成立,且Y’ 包含于Y,不能断言 X->->Y’在R(U)上成立(注意和上一条性质不同) (因为多值依赖中的定义中涉及了U中除了X,Y之外的其余属性Z,因此换成Y’后就需要涉及Z’ = U-X-Y’ 比之前确定X->->Y的时候属性列多,就不一定了)
    
    
    
     函数的概念和这个概念有相似的地方
    
    学习函数的概念前,先引入的概念是映射,一对一映射的关系就被称为函数。简单的例子
    
    f(x, y, z)= x2+4y+z
    
    对于任何一确定的(x,y,z),都有一个确定的f(x,y,z)与之对应。这种概念很容易推广到关系数据库模式上,R(U),U={X,Y,Z, K},对于任何一个元组,只要(X,Y,Z)确定了,就能确定整个元组,也就是存在K = f(X,Y,Z)的关系,只不过这里的f不能用公式表达,而只能是语义上的含义。
    
    
    
    再到后来,我们接触了类似y2=x的方程,也就是
    
    f(x,y) = +-sqrt(x)
    
    显然,此时对于一个确定的x值,f(x)可能有两个值与之对应,从严格的“函数”定义出发,这不能算是函数。但是为了统一概念,被称作“多值函数”。需要注意的是这里虽然x不能完全确定f(x,y)的值,但是能确定f(x,y)的取值范围(所有可能的值的组)。
    
    关系模式中的多值依赖也从概念上与此非常类似,给定元组中的一些属性,可确定另外的属性可能的取值,也就是说,给定的属性值能确定几个元组,而不是唯一的元组。
    
    还是上面的多值函数,可见f(x,y)的值仅与x有关 ,而与y无关。这在关系模式上就叫做平凡多值依赖。平凡多值依赖是4NF中可以存在的,而非平凡且非函数多值依赖不能在4NF中存在。

     

    展开全文
  • 数据库之函数依赖多值依赖

    万次阅读 2019-04-30 19:31:57
    一、函数依赖(Functional Dependency)的概念 函数依赖是数据依赖的一种,它反映属性或属性组之间依存,互相制约的关系,即反应现实世界的约束关系。 设R(U)是属性U上的一个关系模式,X和Y均为U={A1 , A2 , . ....

    一、函数依赖(Functional Dependency)的概念

    函数依赖是数据依赖的一种,它反映属性或属性组之间依存,互相制约的关系,即反应现实世界的约束关系。

    设R(U)是属性U上的一个关系模式,X和Y均为U={A1 , A2 , . . . ,An}的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[Y],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。

    简单来说,就是一个属性可以唯一决定另一个属性。

    例:

    (学生:Sno学号,Sname姓名,Sdept系别)

    1、Sno->Sname,学号可以决定一个姓名。学号函数决定姓名
    2、Sname->Sdept,姓名可能会重复。姓名不能函数决定系别

    下面是自己总结的四种依赖关系:

    二、多值依赖(Functional Dependency)的概念

            设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。

            若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖。否则,称X->->Y为非平凡的多值依赖。

    平凡多值依赖就是,属性集合中分为两个真子集,每一个X对应一组Y的取值

            可以看出,如果把上面的一组改为一个,那么多值依赖就变成了函数依赖。当然一个值组成的组也是组,所以说,函数依赖是多值依赖的特殊情况。

    多值依赖的性质:

    若 X->->Y , 则 X->->Z  多值依赖对称性

    若X->Y.则X->->Y   说明函数依赖是多值依赖的特殊情况,当X->Y的时候,对于每一个X都有一个Y与之对应,那么对于每一对X,Z都有一组Y与之对应

    设属性值之间有包含关系 XY包含于W包含于U 那么如果R(U)上有X->->Y,那么在R(W)上一世成立的

    若X->->Y 在R(U)上成立,且Y’ 包含于Y,不能断言 X->->Y’在R(U)上成立(注意和上一条性质不同) (因为多值依赖中的定义中涉及了U中除了X,Y之外的其余属性Z,因此换成Y’后就需要涉及Z’ = U-X-Y’ 比之前确定X->->Y的时候属性列多,就不一定了)

    展开全文
  • 文章目录0.思维导图1.为什么要学习关系数据库规范化理论?(1)基本概念回顾(2)关系模式的形式化定义(3)什么是数据依赖F?(4)数据依赖F对关系模式的影响1️⃣ 数据冗余(Data ...(2)函数依赖函数依赖② 平


    0.思维导图

    在这里插入图片描述

    1.为什么要学习关系数据库规范化理论?

    感性认识:

    • 当我们面对一个实际问题时,我们应该如何去建数据库,建表,库的结构,表的结构我们该如何组织,才能更好的解决问题。
    • 如何省内存,提高查询修改删除更新的效率?
    • 如何避免可能出现的隐患,如修改删除更新插入等异常?
    • 以上就是关系数据库规范化理论研究解决的问题,说白了就是告诉你如何才能设计出合适的库和表

    下面我们回顾几个概念和问题,以便更好地学习后面的关系数据库规范化理论

    (1)基本概念回顾

    • 关系:可简单的理解为二维表

    • 关系模式:即二维表的逻辑结构

    • 关系数据库:指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,关系型数据库这一系列的行和列被称为表,一组表组成了数据库

    • 关系数据库的模式:即关系数据库的逻辑结构

    (2)关系模式的形式化定义

    • 这里我们回顾一下《数据库系统概论》中对二维表结构的定义

    关系模式由五部分组成,即它是一个五元组:
    R(U, D, DOM, F)
    R: 关系名,即表名
    U: 组成该关系的属性名集合
    D: 属性组U中属性所来自的域。数据的取值范围和类型
    DOM: 属性向域的映象集合
    F: 属性组U上的一组数据依赖。

    关系数据库规范化理论研究的就是R、F、U,之间的关系。
    因为D和DOM对研究表的设计关系不大,所以在学习关系数据库规范化理论时可以将五元组简化成三元组

    三元组:R(U, F)
    当且仅当U上的一个关系r满足F时,r称为关系模式 R(U, F)的一个关系

    (3)什么是数据依赖F?

    这里我们对F中的数据依赖进行简单解释,后面会详细叙述函数依赖多值依赖

    数据依赖一个关系内部属性与属性之间的一种约束关系。
    这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系
    它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。

    数据依赖分类:

    • 函数依赖(Functional Dependency,简记为FD)

    函数依赖极为普遍地存在于现实生活中。比如描述一个学生的关系,可以有学号(Sno)、姓名(Sname)、 系名(Sdept) 等几个属性。由于一个学号只对应一个学生,一个学生只在一一个系学习。因而当“学号”值确定之后,学生的姓名及所在系的值也就被唯一地确定了。属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定 了。

    • 多值依赖(Multivalued Dependency,简记为MVD)
    • 其他

    (4)数据依赖F对关系模式的影响

    • 因为关系数据库规范化理论主要研究的是三元组R(U,F),U我们都好理解,最重要的是F,这里我们简单的了解一下F对关系模式,即表的逻辑结构的影响,让我们理性的认识为什么学习关系数据库规范化理论

    举个例子:

    [例1]建立一个描述学校教务的数据库,数据库涉及的对象有:
    学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程名(Cname)、成绩(Grade)

    这里我们用单一的关系模式Student来表示这些对象:
    Student <U、F>
    该关系的属性集合:
    U ={ Sno, Sdept, Mname, Cname, Grade }

    这里说明一下现实世界的事实语义,关于这些对象之间的联系:
    ①一个系有若干学生,但一个学生只属于一个系。
    ②一个系只有一名(正职)负责人。
    ③一个学生可以选修多门课程,每门课程有若干学生选修。
    ④每个学生学习每一一门课程有一个成绩。

    于是得到属性组U上的一组函数依赖F
    F={Sno- > Sdept, Sdept- >Mname, (Sno, Cno)- >Grade}
    (如图所示)

    在这里插入图片描述

    • 如果只考虑函数依赖这一种数据依赖, 可以得到一个描述学生的关系模式Student <U,F>。表6.1是某一时刻关系模式Student的一个实例,即数据表。
      在这里插入图片描述

    这个关系模式设计的并不好,存在以下问题:

    1️⃣ 数据冗余(Data redundancy)

    • 比如,每一个系的系主任姓名重复出现,重复次数与该系所有学生的所有课程成绩出现次数相同,如表6.1所示。这将浪费大量的存储空间。

    2️⃣ 更新异常(update anomalies )

    • 由于数据冗余,当更新数据库中的数据时,系统要付出很大的代价来维护数据库的完整性,否则会面临数据不一致的危险。 比如,某系更换系主任后,必须修改与该系学生有关的每一个元组。

    3️⃣ 插入异常(insertion anomalies )

    • 如果一个系刚成立,尚无学生,则无法把这个系及其系主任的信息存入数据库。

    4️⃣ 删除异常( deletion anomalies)

    • 如果某个系的学生全部毕业了,则在删除该系学生信息的同时,这个系及其系主任的信息也丢掉了。

    鉴于存在以上种种问题,可以得出这样的结论:

    • Student关系模式不是一个好的模式
    • “好”的模式:
      不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少
    • 原因:由存在于模式中的某些数据依赖引起的
    • 解决方法:通过分解关系模式消除其中不合适 的数据依赖

    可以把这个单一模式分成3个关系模式:

    • S(Sno,Sdept,Sno → Sdept);
    • SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
    • DEPT(Sdept,Mname,Sdept→ Mname)

    这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
    一个模式的数据依赖会有哪些不好的性质,如何改造一个不好的模式,这就是接下来2.规范化要讨论的内容。

    2.规范化—改造关系模式,解决插入异常、删除异常、更新异常和数据冗余问题。

    (1)规范化研究什么?

    • 规范化讨论如何根据属性间依赖情况来判定关系是否具有某些不合适的性质
    • 通常按属性间依赖情况来区分关系规范化程度第一范式、第二范式、第三范式和第四范式等
    • 用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。

    接下来我们依次学习以下内容,来更好的掌握规范化理论,来更好的设计表的结构,设计关系模式。

    • 函数依赖
    • 范式
    • 2NF
    • 3NF
    • BCNF
    • 多值依赖
    • 4NF

    其中函数依赖、码是为了学习范式、1NF,2NF,3NF……打基础

    (2)函数依赖

    这里我们讨论数据依赖F中的函数依赖,分为以下几种类型:

    • 函数依赖
    • 平凡函数依赖与非平凡函数依赖
    • 完全函数依赖与部分函数依赖
    • 传递函数依赖

    ① 函数依赖

    在这里插入图片描述

    注意:函数依赖不是指关系模式R的某个或某些关系满足的约束条件,而是指R的一切关系均要满足的约束条件。

    以下是一个错误的例子:
    sno->sdept,sno应该唯一决定sdept
    在这里插入图片描述

    函数依赖和别的数据依赖样是语义范畴的概念,只能根据语义来确定一个函数依赖。
    例如,姓名→年龄这个函数依赖只有在该部门没有同名人的条件下成立。如果允许有同名人,则年龄就不再函数依赖于姓名了。

    ② 平凡函数依赖与非平凡函数依赖

    在这里插入图片描述
    在这里插入图片描述

    ③ 完全函数依赖与部分函数依赖

    在这里插入图片描述
    在这里插入图片描述

    ④ 传递函数依赖

    在这里插入图片描述
    在这里插入图片描述
    直接依赖这里我们举个例子:
    BH(sno,idCard,address)

    X:sno 学号
    Y:idCard 身份证号
    Z:address 住址
    X->Y,Y->X,X<->Y,Y->Z
    所以我们说Z直接依赖于X

    (3)码

    • 码是关系模式中的一个重要概念。在 码的定义中有关码的若干定义, 这里用函数依赖的概念来定义码。
    • 码唯一决定一个实体集

    ① 候选码、超码、主码

    在这里插入图片描述

    ② 主属性和非主属性

    主属性与非主属性

    • 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
    • 不包含在任何码中的属性称为非主属性(Nonprime attribute)非码属性(Non-key attribute)

    举几个例子:

    [例2]
    关系模式S(Sno,Sdept,Sage),单个属性Sno是
    SC(Sno,Cno,Grade)中,(Sno,Cno)是

    [例3]
    关系模式R(P,W,A)
    P:演奏者 W:作品 A:听众
    一个演奏者可以演奏多个作品
    某一作品可被多个演奏者演奏
    听众可以欣赏不同演奏者的不同作品
    码为(P,W,A),即All-Key

    ③ 外部码

    在这里插入图片描述

    (4)范式

    • 范式是符合某一种级别的关系模式的集合
    • 关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同的范式。
    • 级别越高,表设计的越合理

    范式的种类:

    在这里插入图片描述
    各种范式之间存在联系:

    在这里插入图片描述

    • 某一关系模式R为第n范式,可简记为R∈nNF。
      一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

    ① 1NF

    1NF的定义:

    • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
    • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
    • 但是满足第一范式的关系模式并不一定是一个好的关系模式

    以下是一个满足1NF,但不是好的关系模式的例子:

    关系模式 S-L-C(Sno, Sdept, Sloc, Cno, Grade)
    Sloc为学生住处,假设每个系的学生住在同一个地方

    • 这个例子中存在函数依赖,不是一个好的关系模式

    在这里插入图片描述
    图形化表示:
    在这里插入图片描述
    S-L-C不是一个好的关系模式,一个关系模式 R不属于2NF,就会产生以下几个问题:

    • (1)插入异常。假若要插入一个学生Sno=S7, Sdept =PHY, Sloc =BLD2, 但该生还未选课,即这个学生无Cno,这样的元组就插不进S-L-C中。因为插入元组时必须给定码值,而这时码值的一部分 为空,因而学生的固有信息无法插入。
    • (2)删除异常。假定某个学生只选一门课,如S4就选了一门课C3,现在C3这门课他也不选了,那么C3这个数据项就要删除。而C3是主属性,删除了C3,整个元组就必须一起删除,使得S4的其他信息也被删除了,从而造成删除异常,即不应删除的信息也删除了。
    • (3)修改复杂。某个学生从数学系(MA)转到计算机科学系(CS),这本来只需修改此学生元组中的Sdept分量即可,但因为关系模式S-L-C中还含有系的住处Sloc属性,学生转系将同时改变住处,因而还必须修改元组中的Sloc分量。另外,如果这个学生选修了k门课,Sdept、 Sloc重复存储了k次,不仅存储冗余度大,而且必须无遗漏地修改k个元组中全部Sdept、Sloc 信息,造成修改的复杂化

    为什么会有这些问题呢?

    • 原因:
      Sdept、 Sloc部分函数依赖于码
    • 解决方法(也就是2NF的处理方法)
      S-L-C分解为两个关系模式,以消除这些部分函数依赖
      SC(Sno, Cno, Grade)
      S-L(Sno, Sdept, Sloc)
      在这里插入图片描述

    ② 2NF

    在这里插入图片描述

    • 采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

    • 将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。所以又引入了3NF。

    ③ 3NF

    在这里插入图片描述
    这里我们对上面的2NF例子再次进行剖析:在这里插入图片描述
    在这里插入图片描述

    解决方法:

    • 采用投影分解法,把S-L分解为两个关系模式,以消除传递函数依赖
      S-D(Sno, Sdept)
      D-L(Sdept,Sloc)
    • S-D的码为Sno, D-L的码为Sdept。
    • 分解后的关系模式S-D与D-L中不再存在传递依赖

    在这里插入图片描述

    • 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

    • 将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。

    ④ BCNF

    BCNF ( Boyce Codd Normal Form)是由Boyce与Codd提出的,比上述的3NF又进了一步,通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。

    在这里插入图片描述

    在这里插入图片描述
    下面用几个例子说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。

    [例5] 关系模式C(Cno,Cname,Pcno)
    C∈3NF
    C∈BCNF

    关系模式C(Cno, Cname, Peno), 它只有一个码Cno, 这里没有任何属性对Cno部分依赖或传递依赖,所以C∈3NF。同时C中Cno唯一的决定因素, 所以C ∈BCNF。

    [例6]关系模式S(Sno, Sname, Sdept, Sage)
    假定S有两个码Sno,Sname
    S∈3NF。
    S ∈ BCNF

    假定Sname也具有唯一性, 那么S就有两个码,这两个码都由单个属性组成,彼此不相交。其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。
    同时S中除Sno、Sname外没有其他决定因素,所以S也属于BCNF。

    [例7]关系模式SJP(S,J,P)
    SJP∈3NF,
    SJP∈BCNF

    [例6.7]关系模式SJP(S, J, P)中,S是学生,J表示课程,P表示名次。
    每一个学生选修每门课程的成绩有一定的名次,
    每门课程中每一名次只有一个 学生(即没有并列名次)。
    由语义可得到下面的函数依赖:
    (S,J)→P; (J,P)→S
    所以(S,J) 与(J,P)都可以作为候选码
    这两个码各由两个属性组成,而且它们是相交的。
    这个关系模式中显然没有属性对码传递依赖或部分依赖。
    所以SJP∈3NF,而且除(S,J)与(J,P)以外没有其他决定因素,所以SJP∈BCNF。

    [例8] 关系模式STJ(S, T, J)中,S表示学生,T表示教师,J表示课程。

    每一教师只教一门课,
    每门课有若干教师,
    某一学生选定某门课, 就对应一个固定的教师。
    由语义可得到如下的函数依赖。
    (S,J)→T,(S,T)-J, T→J
    函数依赖关系可以用如图表示
    在这里插入图片描述
    这里(S,J)、 (S,T)都是候选码
    STJ是3NF,因为没有任何非主属性对码传递依赖或部分依赖
    STJ不是BCNF关系因为T是决定因素,而T不包含码。

    如何解决才能让STJ是BCNF关系呢?

    ⑤ 3NF与BCNF的关系

    在这里插入图片描述

    • 3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
    • 一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内它已实现了彻底的分离,已消除了插入和删除的异常。
    • 3NF的“不彻底”性表现在可能存在主属性对码部分依赖传递依赖

    (5)多值依赖

    • 前面我们讲了数据依赖分为函数依赖和多值依赖,函数依赖在上面已经叙述了,这里我们再讨论多值依赖。

    用一个例子引入多值依赖:

    [例9] 学校中某一门课程由多个教师讲授,他们使用相同的一套参考书。每个教员可以讲授多门课程,每种参考书可以供多门课程使用。

    可以用一个非规范化的关系来表示教师T、课程C和参考书B之间的关系
    在这里插入图片描述
    把这张表变成一张规范化的二维表:
    在这里插入图片描述

    • 关系模型Teaching (C, T,B)的码是(C, T, B),即all-key,因而Teaching∈BCNF。

    • 但是当某一课程(如物理)增加一名讲课教师(如周英)时,必须插入多个(这里是三个)元组:
      (物理,周英,普通物理学),(物理,周英,光学原理),(物理,周英,物理习题集)。

    • 同样,某一门课(如数学)要去掉一本参考书(如微分方程),则必须删除多个(这里是两个)元组:
      (数学,李勇微分方程),(数学,张平微分方程)。

    • 可以看出对数据的增删改很不方便,数据的冗余也十分明显。

    • 仔细考察这类关系模式,发现它具有一种称之为多值依赖(Multi-Valued Dependency, MVD)的数据依赖。

    ① 多值依赖的定义

    在这里插入图片描述

    例如,在关系模式Teaching中,对于一个(物理,光学原理)有一组T值{李勇,王军},这组值仅仅决定于课程C上的值(物理)。
    也就是说对于另一个(物理,普通物理学),它对应的一组T值仍是{李勇,王军},尽管这时参考书B的值已经改变了。
    因此T多值依赖于C,即C→→T

    在这里插入图片描述

    在这里插入图片描述

    ② 平凡多值依赖和非平凡多值依赖

    在这里插入图片描述
    下面再举一个具有多值依赖的关系模式的例子。

    • 对于W的每一个值Wi, S有一个完整的集合与之对应而不问C取何值。所以W→→S(多值依赖)。
      在这里插入图片描述

    如果用图下图来表示这种对应
    在这里插入图片描述

    • 则对应W的某一个值Wi的全部S值记作{S}wi (表示此仓库工作的全部保管员)
    • 全部C值记作{C}wi (表示在此仓库中存放的所有商品)。
    • 应当有{S}wi中的每一个值和{C}wi中的每一个C值对应。
    • 于是{S}wi与{C}wi之间正好形成一个完全二分图,因而W→→S
    • 由于C与S的完全对称性,必然有W→→C成立。

    多值依赖具有以下性质:

    在这里插入图片描述

    ③ 多值依赖与函数依赖的区别

    在这里插入图片描述

    (6)4NF

    在这里插入图片描述在这里插入图片描述

    在这里插入图片描述

    (7)规范化小结—重点归纳步骤

    • 关系数据库的规范化理论是数据库逻辑设计的工具

    • 目的:尽量消除插入、删除异常,修改复杂,数据冗余

    • 基本思想:逐步消除数据依赖中不合适的部分
      实质:·概念的单一化·

    关系模式规范化的基本步骤:

    在这里插入图片描述

    参考:《数据库系统概论第五版》—王珊

    展开全文
  • 范式 函数依赖 多值依赖

    千次阅读 多人点赞 2020-12-30 22:11:33
    第一范式、第二范式、第三范式、第四范式、第五范式、扩展第三范式、函数依赖、完全函数依赖、部分函数依赖、传递函数依赖、平凡函数依赖多值依赖,定义、举例、图解、关系
  • 数据库原理之函数依赖多值依赖

    万次阅读 多人点赞 2018-01-04 18:51:27
    任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料...
  • 1、介绍函数依赖多值依赖的推理规则集以及两则的区别 2、介绍函数依赖的逻辑蕴涵 3、属性闭包
  • 数据库基础1—函数依赖 多值依赖

    万次阅读 2014-09-16 13:47:53
    在数据库知识中有讲到数据库的函数依赖
  • 数据库部分函数依赖 完全函数依赖 传递函数依赖 第一范式、第二范式、第三范式、BCNF范式区别 在理解函数依赖之前,先来看一下函数依赖分析: 在关系中,包括在任何候选码中的属性称为主属性;不包括在任何候选...
  • 多值依赖与部分函数依赖

    千次阅读 2014-02-03 21:59:59
     设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个对应一组Y的,这组仅仅决定于XZ无关。  若X->->Y,而Z=...
  • 其中函数依赖多值依赖最为重要,如何理解这两种依赖呢,学了一段时间后,不仅想到高中时学习函数的情景。 学习函数的概念前,先引入的概念是映射,一对一映射的关系就被称为函数。简单的例子 f(x, y, z)= x2+4y+...
  • 一、函数依赖: 1.完全函数依赖: 通过AB能得出C,但是AB单独得不出C,那么说C完全依赖于AB。 2.部分函数依赖: 通过AB能得出C,通过A也能得出C,通过B也能得出C,那么说C部分依赖于AB。 3.传递函数依赖: 通过A得到...
  • 数据库学习1--函数依赖多值依赖

    千次阅读 2015-06-24 09:29:52
    数据依赖中最重要的有:函数依赖多值依赖,当然还有其他依赖关系,这里只讨论这两种。函数依赖:属性间由于某个属性X确定了,那么属性Y也就确定了举个例子,f(x) = y,如果x确定了,y也就确定了。 学生信息管理...
  • 函数依赖

    万次阅读 多人点赞 2019-06-07 15:17:57
    定义:设 R 为任一给定关系,如果对于 R 中属性 X 的每一个,R 中的属性 Y 只有唯一值与之对应,则称 X 函数决定 Y 或称 Y 函数依赖于 X ,记作 X—>Y。其中,X 称为决定因素。 通俗一点,就是给定一个 X 都有...
  • 一、函数依赖 函数依赖是数据依赖的一种,它反映属性或属性组之间相依存,互相制约的关系,即反映现实世界的约束关系。 设R(U)是属性U上的一个关系模式,X和Y均为U={A1,A2,…,An}的子集,r为R的任一关系,如果...
  • 函数依赖与关系模式的范式

    千次阅读 2019-07-31 22:06:43
    目录 函数依赖 完全函数依赖与部分函数依赖: ...数据依赖有函数依赖多值依赖。 函数依赖(FD ,Functional Dependency)是关系模式中属性之间的一种逻辑依赖关系。 SCD(SNo,SN,Age,Dept,MN,CNo,S...
  • 传递函数依赖与第三范式

    千次阅读 2020-01-02 11:37:08
    其中最重要的是函数依赖多值依赖。 2.函数依赖 设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性相同时,则它们的Y属性也相同,则称X函数决定Y,或Y函数依赖于X。 3.平凡函数依赖 当关系中...
  • 规范化理论:多值依赖

    千次阅读 2019-05-12 21:04:11
    多值依赖的定义 我们用一个例子来引出多值依赖(Multivalued Dependency,MVD)的含义。 假设学校中一门课程可由名教师讲授,教学中他们使用相同的一套参考书,这样我们可用下图的非规范化的关系来表示课程C、...
  • 规范化理论:函数依赖

    千次阅读 2019-05-11 19:35:44
    数据依赖一般分为函数依赖多值依赖和连接依赖。其中函数依赖是最重要的数据依赖。 函数依赖(FunctionalDependency,FD)是关系模式中属性之间的一种逻辑依赖关系。例如,在一个有关学生的关系模式SCD(属性SNo,...
  • 根据函数依赖求最小依赖集

    万次阅读 多人点赞 2019-06-26 13:37:36
    【例1】关系模式R<U,F>...第二步:逐个去掉X→A依赖后,设剩下函数依赖集为G,求属性集X关于G的闭包,如果闭包包含右边属性A,则去掉该函数依赖。 A→B:(A)+=AC,不包含B,保留。 A→C:(A)+...
  • 给定函数依赖集合F={ A2→(A3,A5); (A1, A3)→A6; (A2,A6)→ A4 },则关于R既保持 依赖又无损连接地分解成第三范式,分解正确 的是 A.p={R1(A2,A3, A5), R2(A1,A3,A6), R3(A2,A4,A6) } B.p={R1(A2,A3, A5), R2(A1...
  • 数据库函数依赖——完全函数依赖、部分函数依赖、传递函数依赖【通俗易懂,博主会讲人话】 数据库函数依赖——完全函数依赖、部分函数依赖、传递函数依赖【通俗易懂,博主会讲人话】 1、函数依赖:在一个表里面,...
  • 函数依赖的闭包 属性集闭包 码 求候选键算法 最小函数依赖集 关系模式R(U,D,DOM,F) R:关系名,符号化的元组定义 U:一组属性 D:属性组U中的属性所来自的域 DOM:属性到域的映射 F:属性组U上的一组数据...
  • 函数依赖和关系模式分解

    千次阅读 2020-06-23 10:11:40
    文章目录一,第一范式关系数据库设计中易犯的错误数据冗余插入、删除、修改异常模式分解函数依赖(FD)函数依赖的使用函数依赖集的闭包Armstrong 公理计算 F^+^属性集的闭包属性闭包的用途正则覆盖无关属性检测属性...
  • 数据库,部分函数依赖,传递函数依赖,完全函数依赖,三种范式的区别
  • 目录数据库系统原理-函数依赖和关系模式分解第一范式如何处理非原子原子性关系数据库设计中易犯的错误模式分解无损连接分解优化关系模式的步骤函数依赖函数依赖定义函数依赖的使用函数依赖集的闭包Armstrong公理...
  • 部分函数依赖: ...所以姓名部分函数依赖与(学号,身份证号); 完全函数依赖: 设X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。 **eg:**学生基本
  • 函数依赖:  简单来说就是一种决定关系,学生编号x决定学生姓名y,则称学生姓名y函数依赖于学生编号x,记做x->y。 部分函数依赖:  表达一种冗余的依赖关系,设U{A1,A2,…,An}是属性集合,R(U)为某关系...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 965,533
精华内容 386,213
关键字:

函数依赖与多值依赖