精华内容
下载资源
问答
  •  第三范式的定义:如果关系模式R中的所有非主属性对任何候选关键字都不存在传递依赖,则称关系R是属于第三范式的。记作R 3NF。  如:学生关系模式S1(学号,姓名,系号,系名,系地址)  (学号)为关键字,因...
  • 关系模式规范化

    千次阅读 2019-03-22 21:26:43
    3NF规范化:通过该算法可以获得一个保持函数依赖性并满足3NF的关系模式分解 先求出Fmin 1、X->A,XA=R 那么XA单独构成一个关系模式 2、如果关系模式R中的某些属性与函数依赖集F的左右部属性均无关的话,将他们...

    3NF规范化:通过该算法可以获得一个保持函数依赖性并满足3NF的关系模式分解

    先求出Fmin

    1、X->A,XA=R  那么XA单独构成一个关系模式

    2、如果关系模式R中的某些属性与函数依赖集F的左右部属性均无关的话,将他们单独作为一个模式

    3、出现X->A1,X->A2……可以合并成一个关系模式 X->A1A2……

     

    继续:

    在上述规范化的基础上,再继续求取既保持函数依赖性又满足无损连接性的3NF的关系模式分解

    1、拿到分解后,进行判断该模式分解 是否具有无损连接性

    2、若具有无损连接性,则结束;若不具有,则在模式分解中并上一个由候选码组成的关系模式

    提示:从1NF到3NF 需要逐步消除非主属性对码的部分依赖以及非主属性对码的传递依赖,把这些冗余的依赖

    都单独分解出来,在综合上述方法,进行进一步的规范化。

     

    其中 判断无损连接性的方法是用表格法(表格法适合多个关系,定义法只适合两个关系)。

     

    最后还有个BCNF的总结:

    把一个关系模式分解为具有无损连接性的BCNF

    1、如果所有模式都是BCNF,则结束

    2、X->A ,X中不包含候选码,将XA从模式中分解,亦即:S1=XA    S2=S-(A-X)

    用{S1,S2}代替S

    分解结束;

    关系模式规范化的三种标准:

    保证无损连接性:保证不丢失信息

    保证函数依赖性:减轻或解决各种异常状况

    既保持函数依赖性又保持无损连接性

     

    文章内容,是学习MOOC网的数据库原理及应用课程之后,自己梳理总结。希望对大家的数据库学习有所帮助。

    如有不足或错误之处欢迎留言,一定更正。

     

     

     

     

     

    展开全文
  • 关系模式规范化(设计范式)

    千次阅读 2020-10-28 19:13:56
    关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。对于各种范式之间有如下...

    目录

    数据库之六大范式详解

    1. 第一范式 1NF

    规范化: 

    2. 第二范式 2NF

    候选码: 

    主属性: 

    函数依赖: 

    判断一个关系是否属于第二范式:

    改进:

    3. 第三范式 3NF

    改进

    结论

    4. BC范式 BCFN

    要了解 BCNF 范式,那么先看这样一个问题:

    改进

    5. 第四范式 4NF

    6. 第五范式 5NF


    数据库之六大范式详解

    关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。

    首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。

    很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。

    数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。

    一般在我们设计关系型数据库的时候,最多考虑到BCNF就够。符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。

    关系模式”和“关系”的区别,类似于面向对象程序设计中”类“与”对象“的区别。”关系“是”关系模式“的一个实例,你可以把”关系”理解为一张带数据的表,而“关系模式”是这张数据表的表结构。


    1. 第一范式 1NF

    定义: 属于第一范式关系的所有属性都不可再分,即数据项不可分。

    理解: 第一范式强调数据表的原子性,是其他范式的基础。如下图所示数据库就不符合第一范式:

    实际上,1NF是所有关系型数据库的最基本要求,你在关系型数据库管理系统(RDBMS),例如SQL Server,Oracle,MySQL中创建数据表的时候,如果数据表的设计不符合这个最基本的要求,那么操作一定是不能成功的。也就是说,只要在RDBMS中已经存在的数据表,一定是符合1NF的。如果我们要在RDBMS中表现表中的数据,就得设计为下表的形式:

    但日常生活中仅用第一范式来规范表格是远远不够的,依然会存在数据冗余过大、删除异常、插入异常、修改异常的问题,此时就需要引入规范化概念,将其转化为更标准化的表格,减少数据依赖。

    规范化: 

    1. 每一名学生的学号、姓名、系名、系主任这些数据重复多次。每个系与对应的系主任的数据也重复多次——数据冗余过大
    2. 假如学校新建了一个系,但是暂时还没有招收任何学生(比如3月份就新建了,但要等到8月份才招生),那么是无法将系名与系主任的数据单独地添加到数据表中去的 (注1)——插入异常

      注1:根据三种关系完整性约束中实体完整性的要求,关系中的码(注2)所包含的任意一个属性都不能为空,所有属性的组合也不能重复。为了满足此要求,图中的表,只能将学号与课名的组合作为码,否则就无法唯一地区分每一条记录。

      注2:码:关系中的某个属性或者某几个属性的组合,用于区分每个元组(可以把“元组”理解为一张表中的每条记录,也就是每一行)
    3. 假如将某个系中所有学生相关的记录都删除,那么所有系与系主任的数据也就随之消失了(一个系所有学生都没有了,并不表示这个系就没有了)。——删除异常
    4. 假如李小明转系到法律系,那么为了保证数据库中数据的一致性,需要修改三条记录中系与系主任的数据。——修改异常

    正因为仅符合1NF的数据库设计存在着这样那样的问题,我们需要提高设计标准,去掉导致上述四种问题的因素,使其符合更高一级的范式(2NF),这就是所谓的“规范化”。

    规范化: 一个低一级的关系模式通过模式分解可以转化为若干个高一级范式的关系模式的集合,这个过程叫做规范化。


    2. 第二范式 2NF

    定义: 若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。

    此处我们需要理解非主属性、候选码和完全函数依赖的概念。

    候选码: 

    若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。

    以下所有内容中,主码或候选码都简称为码。

    例如下图所示的学生表中,学号和姓名都可以唯一标识一个元组,故该表的候选码为学号和姓名,主码我们可以随便选定其中一个,则选学号为主码。

    学号姓名年龄性别
    101刘晨19
    102王琪21
    103张宇20
    104李琛19
    105欧阳慧20

    主属性: 

    所有候选码的属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性。

    在上面的学生表中,学号和姓名就是该关系的主属性,年龄和性别就是非主属性。

    函数依赖: 

    设R(U)是属性集U上的关系模式,X、Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称Y函数依赖于X或X函数确定Y。

    完全函数依赖: 

    设R(U)是属性集U上的关系模式,X、Y是U的子集。如果Y函数依赖于X,且对于X的任何一个真子集X’,都有Y不函数依赖于X’,则称Y对X完全函数依赖。记作:如果Y函数依赖于X,但Y不完全函数依赖于X,则称Y对X部分函数依赖
    记号

    传递依赖:

    传递依赖

    理解: 第二范式是指每个表必须有一个(有且仅有一个)数据项作为关键字或主键(primary key),其他数据项与关键字或者主键一一对应,即其他数据项完全依赖于关键字或主键。由此可知单主属性的关系均属于第二范式。

    判断一个关系是否属于第二范式:

    1. 找出数据表中的所有码;
    2. 找出所有主属性和非主属性;
    3. 判断所有的非主属性对码的部分函数依赖。

    表示了表中所有的函数依赖关系:

    码只有一个,就是(学号、课名)
    主属性有两个:学号 课名
    非主属性有四个:姓名系名系主任分数
    对于(学号,课名) → 姓名,有 学号 → 姓名,存在非主属性 姓名 对码(学号,课名)的部分函数依赖。
    对于(学号,课名) → 系名,有 学号 → 系名,存在非主属性 系对码(学号,课名)的部分函数依赖。
    对于(学号,课名) → 系主任,有 学号 → 系主任,存在非主属性 对码(学号,课名)的部分函数依赖。

    所以存在非主属性对于码的部分函数依赖,最高只符合1NF的要求,不符合2NF的要求。

    改进:

    为了符合2NF的要求,我们必须消除这些部分函数依赖,只有一个办法,就是将大数据表拆分成两个或者更多个更小的数据表,在拆分的过程中,要达到更高一级范式的要求,这个过程叫做”模式分解“。模式分解的方法不是唯一的,以下是其中一种方法:
    选课(学号,课名,分数)
    学生(学号,姓名,系名,系主任)

    我们先来判断以下,选课表与学生表,是否符合了2NF的要求?

    对于选课表,其码是(学号,课名),主属性是学号课名,非主属性是分数学号确定,并不能唯一确定分数课名确定,也不能唯一确定分数,所以不存在非主属性分数对于码 (学号,课名)的部分函数依赖,所以此表符合2NF的要求。

    对于学生表,其码是学号,主属性是学号,非主属性是姓名、系名系主任,因为码只有一个属性,所以不可能存在非主属性对于码 的部分函数依赖,所以此表符合2NF的要求。

    表示了模式分解以后的新的函数依赖关系

    下表表示了模式分解以后新的数据

    现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

    1. 李小明转系到法律系
      只需要修改一次李小明对应的系的值即可。——有改进
    2. 数据冗余是否减少了?
      学生的姓名、系名与系主任,不再像之前一样重复那么多次了。——有改进
    3. 删除某个系中所有的学生记录
      该系的信息仍然全部丢失。——无改进
    4. 插入一个尚无学生的新系的信息。
      因为学生表的码是学号,不能为空,所以此操作不被允许。——无改进

    所以说,仅仅符合2NF的要求,很多情况下还是不够的,而出现问题的原因,在于仍然存在非主属性系主任对于码学号的传递函数依赖。为了能进一步解决这些问题,我们还需要将符合2NF要求的数据表改进为符合3NF的要求。


    3. 第三范式 3NF

    定义: 非主属性既不传递依赖于码,也不部分依赖于码。

    理解: 第三范式要求在满足第二范式的基础上,任何非主属性不依赖于其他非主属性,即在第二范式的基础上,消除了传递依赖。

    接下来我们看看上表中的设计,是否符合3NF的要求。

    对于选课表,主码为(学号,课名),主属性为学号课名,非主属性只有一个,为分数,不可能存在传递函数依赖,所以选课表的设计,符合3NF的要求。

    对于学生表,主码为学号,主属性为学号,非主属性为姓名系名系主任。因为 学号 → 系名,同时 系名 → 系主任,所以存在非主属性系主任对于码学号的传递函数依赖,所以学生表的设计,不符合3NF的要求。。

    改进

    为了让数据表设计达到3NF,我们必须进一步进行模式分解为以下形式:
    选课(学号,课名,分数)
    学生(学号,姓名,系名)
    系(系名,系主任)

    对于选课表,符合3NF的要求,之前已经分析过了。

    对于学生表,码为学号,主属性为学号,非主属性为系名,不可能存在非主属性对于码的传递函数依赖,所以符合3NF的要求。

    对于表,码为系名,主属性为系名,非主属性为系主任,不可能存在非主属性对于码的传递函数依赖(至少要有三个属性才可能存在传递函数依赖关系),所以符合3NF的要求。。

    新的函数依赖关系如图

    新的数据表如下表

    现在我们来看一下,进行同样的操作,是否还存在着之前的那些问题?

    1. 删除某个系中所有的学生记录
      该系的信息不会丢失。——有改进
    2. 插入一个尚无学生的新系的信息。
      因为系表与学生表目前是独立的两张表,所以不影响。——有改进
    3. 数据冗余更加少了。——有改进

    结论

    由此可见,符合3NF要求的数据库设计,基本上解决了数据冗余过大,插入异常,修改异常,删除异常的问题。当然,在实际中,往往为了性能上或者应对扩展的需要,经常 做到2NF或者1NF,但是作为数据库设计人员,至少应该知道,3NF的要求是怎样的。


    4. BC范式 BCFN

    定义: 关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>属于BCFN。

    理解: 根据定义我们可以得到结论,一个满足BC范式的关系模式有:

    1. 所有非主属性对每一个码都是完全函数依赖;
    2. 所有主属性对每一个不包含它的码也是完全函数依赖;
    3. 没有任何属性完全函数依赖于非码的任何一组属性。

    要了解 BCNF 范式,那么先看这样一个问题:

    1. 某公司有若干个仓库;
    2. 每个仓库只能有一名管理员,一名管理员只能在一个仓库中工作;
    3. 一个仓库中可以存放多种物品,一种物品也可以存放在不同的仓库中。每种物品在每个仓库中都有对应的数量。

    那么关系模式 仓库(仓库名,管理员,物品名,数量) 属于哪一级范式?

    答:已知函数依赖集:仓库名 → 管理员,管理员 → 仓库名,(仓库名,物品名)→ 数量
    码:(管理员,物品名),(仓库名,物品名)
    主属性:仓库名、管理员、物品名
    非主属性:数量
    ∵ 不存在非主属性对码的部分函数依赖和传递函数依赖。∴ 此关系模式属于3NF。

    基于此关系模式的关系(具体的数据)可能如图所示:

    好,既然此关系模式已经属于了 3NF,那么这个关系模式是否存在问题呢?我们来看以下几种操作:

    1. 先新增加一个仓库,但尚未存放任何物品,是否可以为该仓库指派管理员?——不可以,因为物品名也是主属性,根据实体完整性的要求,主属性不能为空。
    2. 某仓库被清空后,需要删除所有与这个仓库相关的物品存放记录,会带来什么问题?——仓库本身与管理员的信息也被随之删除了。
    3. 如果某仓库更换了管理员,会带来什么问题?——这个仓库有几条物品存放记录,就要修改多少次管理员信息。

    从这里我们可以得出结论,在某些特殊情况下,即使关系模式符合 3NF 的要求,仍然存在着插入异常,修改异常与删除异常的问题,仍然不是 ”好“ 的设计。

    改进

    造成此问题的原因:存在着主属性对于码的部分函数依赖与传递函数依赖。(在此例中就是存在主属性【仓库名】对于码【(管理员,物品名)】的部分函数依赖。

    解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

    仓库(仓库名,管理员)
    库存(仓库名,物品名,数量)

    这样,之前的插入异常,修改异常与删除异常的问题就被解决了。

    以上就是关于 BCNF 的解释。


    5. 第四范式 4NF

    定义: 限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。

    理解: 显然一个关系模式是4NF,则必为BCNF。也就是说,当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值,若有多值就违反了4NF。


    6. 第五范式 5NF

    第五范式有以下要求:
    (1)必须满足第四范式;
    (2)表必须可以分解为较小的表,除非那些表在逻辑上拥有与原始表相同的主键。

    第五范式是在第四范式的基础上做的进一步规范化。第四范式处理的是相互独立的多值情况,而第五范式则处理相互依赖的多值情况。

    展开全文
  • 关系模式规范化

    2020-03-30 17:47:56
    了解关系模式规范化的作用 掌握第一范式-重点 掌握第二范式-重点 掌握第三范式-重点 回顾关系模式 关系模式:关系模式相当于一张二维表的框架,在这个框架下填入数据,称为关系模式的一个实例,或者叫关系(R) R...

    了解关系模式规范化的作用

    掌握第一范式-重点

    掌握第二范式-重点

    掌握第三范式-重点

    回顾关系模式

    关系模式:关系模式相当于一张二维表的框架,在这个框架下填入数据,称为关系模式的一个实例,或者叫关系(R)

    R(A1,A2,A3..Ai):R是关系名,Ai是关系的属性名。一个关系名对应一张表,关系名对应表名,属性对应表中的列名。

    关系模型的简化表示法: R<U,F>

     

    关系模式规范化的作用

    关系型数据库的设计主要是关系模式的设计。关系模式设计的好坏直接影响关系型数据库设计的成败。将关系模式规范化是设计好关系型数据库的唯一途径。

    关系模式的规范化主要有范式来完成。

     

    关系模式

    所谓范式(Normal Form, NF)是指规范化的关系模式。由规范化程度不同而产生不同的范式。根据满足条件不同,经常称某一关系模式R为“第几模式”。

     

    为什么要设计规范化的数据库?

    未经规范化的数据库一般都有下述缺点:

    较大的数据冗余,数据一致性差,数据修改复杂,对表进行更新,插入,删除是会报异常。规范化的作用就在于尽量去除冗余,使数据保持一致,使数据修改简单,除去在表中进行插入、删除时产生的异常,规范化后的表一般都较小。

     

    第一范式(1NF)

    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系型数据库。

    定义:在关系模型中的每一个具体关系R中,如果每个属性都是不可再分的,则称R属于第一范式(1NF),记作R属于1NF。

    第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。

    e.g.如下的数据库表是符合第一范式的:

    字段1   字段2   字段3   字段4

    而这样的数据库表是不符合第一范式的:

    字段1   字段2   字段3(字段3.1,字段3.2)   字段4

    如职工号,姓名,电话号码组成一个表(一个人可能有一个办公室电话和一个家里的电话号码)规范成为1NF。

    总结:不能有重复的列,列不可再分。

    不满足第一范式条件的关系为非范式关系,在关系数据库中,凡非范式关系必须要化成范式关系。

     

    第二范式(2NF)

    第二范式是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式(1NF)。

    定义:如果关系模式R属于1NF,且每一个非主属性都完全依赖于主码,则称关系R是属于第二范式的,记作R属于2NF。

    第二范式(2NF)说明:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖于主关键字的一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。

    e.g.

    假定选修课关系表为SelectCourse(学号,姓名,年龄,课程名称,成绩,学分),关键字为组合关键字(学号,课程名称),因为存在如下决定关系:

    (学号,课程名称)->(姓名,年龄,成绩,学分)

    这个数据库表不满足第二范式,因为存在如下决定关系:

    (课程名称)->(学分)

    (学号)->(姓名,年龄)

    即存在学分和姓名,年龄部分依赖于主关键字。

    由于不符合2NF,这个选课关系表会存在如下问题:

    (1)数据冗余:

    同一门课程会有N个学生选修,“学分”就会重复N-1次;同一个学生选修了M门课程,那姓名和年龄会重复M-1次。

    (2)更新异常:

    若课程的学分更新,那必须把表中所有的学分值都更新,不然会出现同一课程出现不同的学分。

    (3)插入异常:

    假设要开设一门新的课程,但是目前还没有学生选修这门课程,由于没有学号导致数据无法录入到数据库中。

    (4)删除异常:

    假设一批学生已经完成课程的选修,这些选修记录就应该从数据库中删除,但是,同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

    所以我们将设计修改了一下,把选课关系表SelectCourse改为如下三个表:

    学生:Student(学号,姓名,年龄)

    课程:Course(课程名称,学分)

    选课关系:SelectCourse(学号,课程名称,成绩)

    这样的数据库表是符合第二范式的,消除了数据冗余,更新,插入,删除异常。

    注:所有的单关键字的数据库表都符合第二范式,因为不可能存在组合关键字,也就不可能存在非主属性部分依赖于主关键字了。

     

    第三范式

    定义:如果关系模式R属于2NF,并且R中的非主属性不传递依赖与R的候选码,则称关系R是属于第三范式的。(个人总结,非主属性必须直接依赖于候选码,不能存在通过其他非主属性传递依赖于主码)

    所谓传递依赖,就是A依赖于B,B依赖于C,则A传递依赖于C。

    因此,满足第三范式的数据库表应该不存在如下依赖关系:

    关键字段->非关键字段x->非关键字段y

    e.g.

    假定学生关系表为Student(学号,姓名,年龄,所在学院,学院地点,学院电话),关键字为单一的学号,所以肯定符合第二范式,但是因为存在非关键字学院地点和学院电话依赖于所在学院,即传递依赖于学号,所以此关系表不符合第三范式。同样会导致数据冗余,DDL操作异常等问题。

    所以我们可以对其进行修改:

    学生:(学号,姓名,年龄,所在学院)

    学院:(学院,地点,电话)

    这样的数据库表就符合第三范式了。

     

    总结:

    a. 规范化目的是使结构更合理,消除存储异常,减少数据冗余,便于插入,删除,更新。

    b. 原则:遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体建的一种联系。

    c. 方法:将关系模式投影,分解成两个或两个以上的关系模式。

    d. 分解后的关系模式集合应当与原关系模式保持等价关系,即通过自然联接可以恢复原关系而不丢失信息,并保持属性间合理的联系。

    注意:一个关系模式结合分解可以得到不同关系模式集合,也就是说分解方法不是唯一的。最小冗余的要求必须以分解后的数据库能够表达原来数据库所有信息为前提来实现的。其根本膜表是节省存储空间,避免数据不一致性,提供对关系的操作效率,同事满足应用需求。实际上,并不一定要求全部模式都达到BCNF不可。有时候故意保留部分冗余可能更方便数据查询。尤其对于那些更新频度不高,查询频率极高的数据库系统更是如此。在关系数据库中,除了函数依赖之外还有多值依赖,联接依赖的问题,从而提出了第四范式,第五范式等更高一级的规范化要求。

     

     

     

     

     

     

     

     

     

     

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201902/18/1550504717_785227.jpg) ## 谁能告诉我怎么解得呀?
  • Codd提出规范化理论 后经许多专家学者对关系数据库理论作了深 入的研究和发展,形成了系统的关系数据库设 计理论 天系数据库的殺计理论-鳶言 关無数据庠糸统中,头模型包抬一组头糸棋式, 并且各个关
  • PAGE PAGE 1 [模拟] 数据库系统工程师关系模式规范化与应用 填空题 试题1 阅读下列说明根据要求回答下列问题 [说明] 某超市的销售业务由一个销售业务管理系统进行管理该系统每完成一次交易都需要提供顾客发票其格式...
  • 第章数据依赖与关系模式规范化.ppt
  • 关系模式规范化实例析解

    千次阅读 2013-03-08 16:38:35
    关系模式规范化实例析解   2010-07-23 来源:网络   摘要:关系模式是关系数据库的重要组成部份,其规范化理论在整个模式设计中占有主导地位。下面我们试图采用接近课堂教学的方式给出...
    关系模式规范化实例析解
     

    2010-07-23 来源:网络

     

    摘要:关系模式是关系数据库的重要组成部份,其规范化理论在整个模式设计中占有主导地位。下面我们试图采用接近课堂教学的方式给出一个完整实例,希望对初学者有所帮助。

    关键词:关系模式;规范化;函数依赖;范式

    众所周知,关系模式是关系数据库的重要组成部份,其好坏直接影响关系数据库的性能。而关系模式的设计必须满足一定的规范化要求,从而满足不同的范式级别。[1](P.46-52,57)在指导关系模式的设计中,规范化理论占有着主导地位,其基本思想是:消除数据依赖中不合理的部份,使各关系模式达到某种程度的分离,使一个关系仅描述一个实体或者实体间的一种联系。[2]关系模式及其规范化的理论是我们设计和优化关系模式的指南。作为一种优秀而成熟的理论,学习和实践会有一定的难度,但在因特网和相关书籍中难得有比较全面的实例,给我们学习和实践造成不便。下面,我们试图采用接近课堂教学的方式给出一个完整的析解实例,以期对初学者有所帮助。

    一、实例

    假设某商业集团数据库中有一关系模式R(商店编号,商品编号,数量,部门编号,负责人),如果规定:

    (1) 每个商店的每种商品只在一个部门销售;

    (2) 每个商店的每个部门只有一个负责人;

    (3) 每个商店的每种商品只有一个库存数量。

    试回答下列问题:

    (1) 根据上述规定,写出关系模式R的基本函数依赖;

    (2) 找出关系模式R的候选关键字;

    (3) 试问关系模式R最高已经达到第几范式 为什么

    (4) 如果R已达3NF,是否已达BCNF 若不是BCNF,将其分解为BCNF模式集。

    二、预处理

    为了方便,我们用代号代表每个属性:

    A—商店编号

    B—商品编号

    C—部门编号

    D—数量

    E—负责人

    这样,有关系模式:

    R(U,F)

    U={A,B,C,D,E}

    三、根据上述规定,写出关系模式R的基本函数依赖

    为了消除关系模式在操作上的异常问题,优化数据模式,我们需要对关系模式进行规范化处理。而首先需要做的就是函数依赖,以便能确切地反映实体内部各属性间的联系。[2](P.经过对数据语义的分析我们得出下面的依赖关系:

    1.语义:每个商店的每种商品只在一个部门销售,即已知商店和商品名称可以决定销售部门

    例:东店——海尔洗衣机—— —定在家电部销售

    所以得出函数依赖:AB→C

    2.语义:每个商店的每个部门只有一个负责人,即已知商店和部门名称可以决定负责人

    例:东店——家电部——部门经理一定是张三

    所以得出函数依赖是:AC→E

    3.每个商店的每种商品只有一个库存数量,即已知商店和商品名称可以决定库存数量

    例:东店——海尔洗衣机——库存10台

    所以得出函数依赖是:AB→D

    这样:在关系模式R(U,F)中,基本函数依赖集是:F={ AB→C ,AC→E,AB→D }。

    四、找出关系模式R的候选关键字

    根据函数依赖和关键字的基本定义,我们可以说:只有在最小函数依赖集中才能科学、正确地寻找候选关键字。那么何为最小函数依赖集 又怎么求出F的最小函数依赖集呢 根据函数依赖的相关定理我们得知:给定函数依赖集F,如果F中每一函数依赖X->Y∈F满足:(1)X->Y的右边Y为单个属性(F为右规约的);(2)F为左规约(即F中任一函数依赖X→Y∈F的左边都不含多余属性);(3)F为非冗余的(即如果存在F的真子集F’,使得F’≡F,则称F是冗余的,否则称F是非冗余的);则称F为最小函数依赖集,或称F是正则的。每一个函数依赖都等价于一个最小函数依赖集。[3](P.150)按照上面的三个条件进行最小化处理,我们可得到一个求最小函数依赖集方法:第一步,为满足条件1,根据分解性把右侧是属性组的函数依赖分解为单属性的多个函数;第二步,为满足条件2,逐一考察最新F中的函数依赖,消除左侧冗余属性;为满足条件3,逐一考察最新F中函数依赖X->Y,检查X->Y是否被F-{X->Y}所蕴涵,如果是,则X->Y是冗余的,可以删除。[4]所以,F的所谓最小函数依赖集就是去掉了多余依赖的F。按上面提供的算法依据具体计算如下:

    1.根据分解性先分解所有依赖的右边为单属性:

    可以看出:F={ AB→C ,AC→E,AB→D }中所有依赖的右边已为单属性。

    2.对所有依赖的左边为多属性的情况,消除左侧冗余属性:

    下面计算判断AB→C中有无无关属性:

    (1)设A→C,在F={ AB→C ,AC→E,AB→D }中计算A的闭包A+ :

    首先,初始化A+ = {A};经观察,在F={ AB→C ,AC→E,AB→D }中,属性A不能“带进”任何属性。即A的闭包A+ 就是{A},也就是A+ = {A},所以AB→C中B不是无关属性。

    (2)设B→C,在F={ AB→C ,AC→E,AB→D }中计算B的闭包B+:

    首先,初始化B+ = {B};经观察,在F={ AB→C ,AC→E,AB→D }中,属性B不能“带进”任何属性。即B的闭包B+就是{B},也就是B+ = {B},所以AB→C中A不是无关属性。

    (3)同理,AC→E和AB→D中左边亦无无关属性。

    3、下面计算在F={ AB→C ,AC→E,AB→D }中有无冗余依赖:

    我们去掉AB→C,依赖集变为F={ AC→E,AB→D }。

    首先, 初始化{AB}+ = {A,B} ;在F={ AC→E,AB→D }中,有AB→D,即AB可以“带进”D属性 ,这时{AB}+ = {A,B,D};经观察已不能再“带进”其它属性。即{AB}的闭包{AB}+ 就是{A,B,D},也就是{AB}+ = {A,B,D}。

    因为{A,B,D}中不包含C,所以我们说AB→C不是冗余依赖。

    同理计算,AC→E和AB→D亦不是冗余依赖。

    到此,才能肯定F={ AB→C ,AC→E,AB→D }已是最小函数依赖集。

    4、寻找候选关键字也需要一定的计算,下面计算R的候选关键字:

    在F={ AB→C ,AC→E,AB→D }中,我们对所有属性进行归类如下:

    L类属性,即仅在依赖左边出现的属性:A,B

    R类属性,即仅在依赖左边出现的属性:E,D

    LR类属性,即既在依赖左边又在依赖右边出现的属性:C

    N类属性,即既不在依赖左边又不在依赖右边出现的属性:无

    我们知道,L类属性和N类属性一定在候选关键字中,R类属性一定不在候选关键字中。

    所以,A,B一定在候选关键字中,E,D一定不在候选关键字中。这是定性的结果。

    具体的候选关键字是什么呢

    首先,计算L类属性AB的闭包:{A,B}+ ={A,B,D,C,E},因为AB的闭包{A,B,D,C,E}已经包含了所有R的属性,所以,{A,B}是唯一候选关键字。

    对于LR类属性参与候选关键字的相关计算稍嫌复杂,但这里已经找出了关系模式R{A,B,C,D,E}的唯一候选关键字。[3](P.148-150)

    五、关系模式R最高已经达到第几范式 为什么

    很明显,关系模式R(A,B,C,D,E)中的所有属性值都是不可再分的原子项,所以该关系模式已满足第一范式。[1](P.53)那么关系模式R(A,B,C,D,E)是否满足2NF

    根据范式的相关定义我们得知:如果关系模式R(U,F)中的所有非主属性都完全函数依赖于任一候选关键字,则该关系是第二范式。[1](P.54)从上面的分析我们知道R(A,B,C,D,E)的唯一候选关键字是{A,B};非主属性是:C、D、E ;函数依赖集是{ AB→C ,AC→E,AB→D }。所以:

    AB→C

    例:东店——海尔洗衣机—— —定在家电部销售

    AB→D

    例:东店——海尔洗衣机(——只在家电部销售)——库存10台

    AB→E

    例:东店——海尔洗衣机(——卖海尔洗衣机的部门——家电部)——部门经理是张三

    关系模式R(A,B,C,D,E)已满足2NF。

    进一步分析:非主属性C、D、E之间不存在相互依赖,即关系模式R(A,B,C,D,E)不存在非主属性对候选关键字的传递依赖,根据第三范式的定义,关系模式R(A,B,C,D,E)已满足3NF。[1](P.55)

    六、R已达3NF,是否已达BCNF 若不是BCNF,将其分解为BCNF模式集

    由BC范式的定义得知:如果关系模式每个决定因素都包含关键字(而不是被关键字所包含),则R满足BC范式。[1](P.56)分析:在F={ AB→C ,AC→E,AB→D }中,有依赖AC→E的左边{A,C}不包含候选关键字{A,B},即AC→E是BCNF的违例。所以,关系模式R(A,B,C,D,E)不满足BCNF。

    1、下面分解关系模式R(A,B,C,D,E):

    分解3NF,有一定的规则。

    从BCNF违例AC→E入手,我们得到两个新关系模式:R1(A,C,E)和R2(A,C,B,D)

    R1由违例的所有属性组成,R2由违例的决定因素和R的其余属性组成。即:R1(商店编号,部门编号,负责人),实际上描述了“负责人”这一件事。R2(商店编号,商品编号,部门编号,数量),实际上描述了“商品库存”这一件事。已经做到了“一事一地”的原则了,应该能符合更高的范式,但还得经过计算和判断。

    2、下面我们判断R1是否满足BCNF:

    对于一个新关系,不知道它的依赖集,不知道它的候选关键字,我们需要借助原R(A,B,C,D,E)的依赖集F={ AB→C ,AC→E,AB→D }。

    展开全文
  • 关系模式规范化理论

    千次阅读 2019-05-11 19:43:44
    关系模式规范化的定义 到目前为止,规范化理论已经提出了六类范式。范式级别可以逐级升高,而升高规范化的过程就是逐步消除关系模式中不合适的数据依赖的过程,使模型中的各个关系模式达到某种程度的分离。一个低一...
  • 数据库设计中关系规范化理论总结

    千次阅读 多人点赞 2020-07-31 11:08:14
    数据库是一门对数据进行有效管理的技术,它研究信息资源如何被...经过科学家的讨论研究,最终形成我们今天所看到的关系数据库的规范化理论。本文通过例举具体事例来探讨关系规范化理论在数据库逻辑设计中的形成和方法。
  • 后经深入的研究形成了系统的设计理论 关系数据库系统中关系模型包括一组关系模式各个关系模式相互有联系 一个合适的关系数据库系统的设计关键是关系数据库模式的设计 ;关系数据库的设计理论-前言;关系数据库的设计...
  • 数据库原理-关系模式规范化

    千次阅读 2021-08-26 12:29:02
    关系数据库的规范化理论是数据库逻辑设计的工具 一个关系只要其分量都是不可分的数据项,它就是规范化的关系,但这只是最基本的规范化 ...1.关系模式规范化的步骤 消除决定属性集非码的非平凡函数依赖 1
  • 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系型数据库。 例如,这样是符合的:student(id,name,age,class) 而这样就不符合:student(id,...
  • 数据库关系模式规范化

    千次阅读 2021-04-03 15:23:11
    在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即...
  • 关系模式设计中的问题关系数据库设计要解决的主要问题 什么样的数据库模式才合理? 怎么分解才能满足要求? 衡量的标准是什么? 理论基础是什么? 如何进行实现? 关于好的数据库模式好的数据库模式是不会发生插入...
  • 数据库关系规范化

    千次阅读 2019-05-26 14:18:10
    关系数据库中,所有的数据文件都以 二维表的形式...这种分解的过程就叫做规范化。 第一范式1NF 第一范式的目标是确保每列的原子性 如果每列都是不可再分的最小数据单元(也称为最小的原子单 元),则满足第一范...
  • 关系规范化

    千次阅读 2020-07-04 21:24:15
    关系规范化的目的 关系规范化的目的是为了消除储存异常,减少数据冗余,以保证数据的完整性,正确性,一致性和储存效率,一般讲关系规范到III范式即可 1NF范式 一个关系的每个属性都是不可再分的基本数据项,则该...
  • 关系型数据库规范化的通俗理解

    千次阅读 多人点赞 2019-05-26 11:17:35
    最近参加数据库系统工程师的考试,结合自己的工程经验,终于对数据库规范化理论有了一知半解。 本文试图从工程化的角度,用大白话去解释数据库规范化的结论,如果有不严谨之处,敬请指正。我不会去详细介绍每个范式...
  • 数据库——关系数据库规范化习题

    千次阅读 多人点赞 2019-06-29 16:39:00
    对以下的关系模式, 分别写出:(1)码 ,主属性,非主属性?(2)函数依赖?(3)属于第几范式?为什么?(4)有什么问题?(5)如何分解?分解后能否达到几范式? 原问题是否解决?ps(函数依赖的方法: 1.先找出码,再写出码...
  • 根据候选码判断关系F中的函数关系是否满足第二范式,若不满足则为关系模式规范化最高为第一范式 然后判断是否存在非主属性传递依赖,如果存在则不满足第二范式,如果不存在则关系模式规范化最高为第三范式. 通俗...
  • 概念模型与关系模型和关系规范化

    万次阅读 多人点赞 2017-05-20 16:18:34
    》概念模型  概念模型用于信息世界的建模,是实现现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具,也是数据库设计人员和用户之间进行交流的语言,因此概念模型一方面具有较强的语义...
  • 文章目录一、范式分类二、规范化(提高关系模式级别)3NF分解方法BCNF分解方法 一、范式分类 第一范式(1NF):字段都是单一属性的,分量不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、...
  • 文章目录关系模式规范化关系范式 关系模式规范化 目的:解决关系模式中存在的数据冗余、插入和删除异常、删除异常、更新异常等问题。 其基本思想是消除数据依赖中的不合适部分,使各关系模式达到某种程度的分离,使...
  • 数据依赖是一个关系内部属性与属性之间的一种约束关系,这种关系是通过属性间值的相等与否体现的数据相关的关系。 多种类型的数据依赖:函数依赖和多值依赖 例如:Sname和Sdept函数依赖于Sno,记做Sno -> Sname...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 311,660
精华内容 124,664
关键字:

关系模型规范化