• 数据模型、关系模式、函数依赖、模式分解、无损连接


    一、数据模型

      关系模式是一种组织层数据模式。从数据模式三要素(数据结构,数据操作,数据的约束条件)来进行分析。

    1,数据结构

      关系模式用二维表来组织数据,这个二维表在关系模式中称为关系,关系模式的逻辑结构是二维表。

    ①关系

      关系就是二维表满足以下条件:

     

       a.关系中每一列都是不可再分的属性,不能出现如下复合属性(列不可分性):

       b.关系行列无序(行列无序性),交换列的前后顺序(比如性别放到年龄前面并不影响关系模式的语义表达)。

       c.关系中不可能出现两个完全相同的元组(实体完整性) 。

    ②属性

      二维表中的每一列称为属性,每个属性有一个名字称为属性名,称为属性名(就是表头),某一列的值称为属性值,上表有学号姓名年龄等属性。

    ③值域

      二维表中属性的取值范围,如性别只能取男女。

    ④元组

      二维表中的一行数据称为元组(记录)。如(023904,李勇,21,男,计算机系)

    ⑤分量

      元组中的每个属性值称为元组的分量,如对应姓名属性的分量是李勇。

    关系模式

      关系的描述就是关系模式,关系模型全体数据逻辑结构的描述就是关系模式,或者说二维表的表头,设有关系R,属性A1,A2,A3,则表示为R(A1,A2,A3),关系模式是型,关系就是具体的值。

    ⑦关系数据库

      对应一个关系模型的所有关系的集合称为关系数据库。

    ⑧各种码以及主属性

      a.超码:一个或多个属性的集合,这些属性的集合可以使我们在一个关系中唯一标识一个元组。

      b.候选码:候选码是最小的超码,即候选码可以唯一标识一个元组,但除去候选码中的任何一个属性均不能唯一标识元组。

      c.主码:当有多个候选码时可以选择一个作为主码,一个关系只有一个主码。主码能够唯一标识一个关系的元组且不含有多余元素。

      d.主属性:包含在任意候选码中的属性称为主属性,不包含在任意候选码中的属性叫非主属性。

      e.外码:外码用于表示两个或多个实体间的关联关系。外码实际上是关系中的一个或多个属性,这些属性引用其他关系的主码或(候选码),详见参照完整性约束。

    2.数据操作

      关系模式的操作对象是集合(也就是关系)而不是行。操作的数据操作的结果都是完整的表(有表头的),而不是单行。

      操作主要包括查询和更新(增,删,改)。

    3.数据的约束条件

      在数据库中数据的完整性是指保证数据正确性的特性。关系模型中数据完整性规则是对关系的某种约束条件。他的数据完整性约束包含三大类:实体完整性约束,参照完整性约束,用户自定义完整性约束。

    ①实体完整性约束

      实体完整性是指数据库所有表中都有主码,且表中不允许存在:

        a.无主码的记录 (数据库中所有记录主码中所有属性都不为空)   b.主码相同的记录

    ②参照完整性

      参照的完整性要求关系中不允许引用不存在的实体。也称引用完整性,参照完整性描述了实体间的联系。参照完整性一般是指多个实体表之间的引用关系。

      学生关系模式中的专业号引用了专业关系模式中的专业号(且专业号在专业关系模式中是主码),显然学生关系中的专业号必须是个存在的专业号(可以为空表示未分配专业)。即学生关系模式中的专业号是引用了专业关系模式中的专业号的外码。

      注:主码要求非空且不重复,外码没这个要求,外码的值要么为空要么存在。

    ③用户定义完整性

      用户自定义完整性也称为域完整性和语义完整性,任何关系数据库管理系统都应支持实体完整性参照完整性,除此之外根据要求不同还需要加一些特殊的约束条件。

      用户定义完整性实际上就是指明关系中的取值范围,也就是属性的域,所以又叫域完整性,比如性别限定在男女,成绩限定在0-100.

    二、函数依赖

      设一个关系为R(U),X和Y为属性集U上的子集,若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X 函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。

      举例理解,在一个表中,将所有字段分为两部分X和Y,如果X中的一条数据可以唯一确定Y中的一条数据,则称X和Y具有函数依赖关系,并称为X函数决定Y,或Y函数依赖于X,记为:X一>Y,X 为决定因素。

    1,完全函数依赖

      设有关系模式R(U),U是属性集,X和Y是U的子集,如果X→Y是一个函数依赖,且对X的任何一个真子集X'都不存在X'→Y,则称X→Y是一个完全函数依赖(Full Functional Dependency),即Y完全函数依赖于X,即在一张表中字段分为 X 和 Y 两个集合,X集合数据唯一确定一条数据 Y ,X集合字段中的任何一个字段都不能确定唯一一条数据 Y ,就称 Y 完全函数依赖于 X

    2,部分函数依赖

      设有关系模式R(U),U是属性集,X和Y是U的子集,如果X→Y是一个函数依赖,且对X的任何一个真子集X'都存在X'→Y,则称X→Y是一个部分函数依赖(Full Functional Dependency),即Y部分函数依赖于X,即在一张表中分为 X 和 Y 集合,X集合数据唯一确定一条数据Y,并且X中任意字段或组合字段都可以唯一确定Y集合数据,则称 Y 部分函数依赖于 X

    3,传递函数依赖

      在关系模式R(U)中,设X,Y,Z是U的不同的属性子集,如果X确定Y、Y确定Z,且有X不包含Y,Y不确定X,(X∪Y)∩Z=空集合,则称Z传递函数依赖(transitive functional dependency) 于X,即在一张表中,字段分为 X、Y、Z,如果X可以决定Y,Y决定Z,但是Y不能决定X,则称Z传递函数依赖于X

    三、模式分解

    1)把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解。

    2)把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的。

    3)只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义。

      对于第一句话,为什么需要分解关系模式?因为原来的关系模式可能造成数据冗余或给数据库带来潜在的不一致性。对于第二句话,根据不同语义,分解的原则也不尽相同,所以方法肯定是不唯一的,譬如U={A,B,C},根据不同原则(随便你自己定),可能分成(A,B)(A,C)也可能分成(B,C)(A,C)。对于第三句话,为了保证分解后的关系模式与原关系模式等价,我们要判定

    1)分解后形成的行的关系模式中是否为无损连接 

    2)是否保持函数依赖

    1,无损连接的判定:

    1)如果分解后的的关系模式是形如{U1,U2}这,里面只有两个,那很好做,就判断下面是否成立,成立的话肯定是无损连接:

    2)如果是两个以上{U1,U2,U3....}这种,那就比较麻烦了,比如,有属性集,

    ABCDEF,存在这样的函数依赖集{A->BC , CD->E , B->D , BE->F , EF->A},然后有这样的分解{ABC , BD , BEF}。

    官方求解思路:

    ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDi为Xi→Alj,其步骤如下:
    
    ① 建立一张n列k行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj ∈Ui,则在j列i行填上aj,否则填上bij;
    
    ② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列的元素,若其中有aj,则全部改为aj,否则全部改为bmli,m是这些行的行号最小值。
    
    如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。
    
    对F中p个FD逐一进行一次这样的处理,称为对F的一次扫描。
    
    ③ 比较扫描前后,表有无变化,如有变化,则返回第② 步,否则算法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。

    如果软考中考了,我建议你--直接做下一题。

    2,是否保持函数依赖

      若F+=F1+∪F2+∪...∪Fk+,则R<U,F>的分解ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}保持函数依赖。

    例题:对于属性集ABCDEF和函数依赖集{A→BC,CD→E,B→D,BE→F,EF→A},说明下列分解a.是否是无损连接分解;b.是否保持函数依赖。

    (1){ABCD,EFA}

    a.判断无损连接分解

    U1∩U2=A,
    U1-U2=BCD,
    U2-U1=EF
    存在A→BCD∈F+,所以分解是无损连接分解。

    b.判断保持函数依赖

    U1=ABCD,F1+={A→BC,B→D}
    U2=EFA,F2+={EF→A}
    丢失了CD→E,BE→F,因此没有保持函数依赖。

    (1){ABC,BD,BEF}

    a.判断无损连接分解

    ①构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij。

    ②根据A→BC,拆分为A→B,A→C。由于属性列A上没有相同的分量,所以表不改变。
    ③根据CD→E,由于属性列CD上没有相同的分量,所以表不改变。
    ④根据B→D,由于属性列B上第1、2、3行均相同a2,且这些行所在的D属性列存在a4,所以将属性列D上的b14、b34改为同一个符号a4。

    ⑤根据BE→F,由于属性列BE上没有相同的分量,所以表不改变。
    ⑥根据EF→A,由于属性列EF上没有相同的分量,所以表不改变。

    经过比较扫描前后的表格有变化,所以进行第二次扫描,第二次扫描表无变化,没有出现a1,a2,a3,a4,a5,a6,因此不是无损连接分解。

    b.判断保持函数依赖

    U1=ABC,F1+={A→BC}
    U2=BD,F2+={B→D}
    U2=BEF,F3+={BE→F}
    丢失了CD→E,EF→A,因此没有保持函数依赖。

  • 相关阅读:
    hdu 5253 最小生成树
    hdu5248 序列变换
    bjfu1299 stl使用
    bjfu1277 简单递归
    bjfu1262 优先队列
    bjfu1287字符串输出的大水题
    bjfu1281
    bjfu1253 最大上升子序列和
    [转][Unity3D]引擎崩溃、异常、警告、BUG与提示总结及解决方法
    Unity3d 中 将远程 MySQL 数据库转换为本地 Sqlite
  • 原文地址:https://www.cnblogs.com/guanghe/p/14788762.html
Copyright © 2020-2023  润新知