热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

知识点总结_数据库原理与设计第六章知识点总结

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据库原理与设计第六章知识点总结相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据库原理与设计第六章知识点总结相关的知识,希望对你有一定的参考价值。






数据库原理与设计

文章目录


  • 数据库原理与设计
    • 第6章 关系数据库设计理论
      • 6.1 关系模式中可能存在的异常
      • 6.2 关系模式中存在异常的原因
      • 6.3 函数依赖
        • 6.3.1 函数依赖的定义
        • 6.3.2 函数依赖分类及其定义
        • 6.3.3 函数依赖与属性关系
        • 6.3.4 Armstrong公理系统

      • 6.4 关系模式的规范形式
        • 6.4.1 范式
        • 6.4.2 规范化
        • 6.4.3 函数依赖范畴的范式
          • 第一范式(1NF)
          • 第二范式(2NF)
          • 第三范式(3NF)
          • BC范式(BCNF)








写在前面:最近数据库学到第六章了,本篇文章就把其中的知识点整理总结了一下,方便复习。若有纰漏还请多多谅解。

第6章 关系数据库设计理论


6.1 关系模式中可能存在的异常

关系模式中可能存在的4个问题(4个异常):


  1. 插入异常(insert anomaly)

    (1)元组插不进去;

    (2)插入一个元组,却要求插入多个元组。

  2. 删除异常(delete anomaly)

    (1)删除时,删掉了其他信息;

    (2)删除一个元组却删除了多个元组。

  3. 冗余(redundancy)

    冗余的表现是,某种信息在关系中存储多次。

  4. 更新异常(update anomaly)

    更新异常的表现是,修改一个元组,却要求修改多个元组。

    注:有时将冗余和更新异常合二为一,称为“冗余及更新异常”,因为如果存在冗余肯定会存在更新异常。


6.2 关系模式中存在异常的原因

​ 数据的语义不但在完整性方面有体现,在关系模式的设计方面也有体现。

​ 具体表现:在关系模式中的属性间存在一定的依赖关系,此即数据依赖。

数据依赖(Data Dependency):指通过一个关系中属性间值的相等与否体现出来的数据间的相互关系。

​ 数据依赖分类:函数依赖(Functional Dependency, FD)、多值依赖(Multivalued Dependency,MVD)和连接依赖(Join Dependency,JD)。

​ 数据依赖决定因素:由现实系统中属性间相互联系的语义决定。

​ 异常现象产生的根源:关系模式中属性间存在的这些依赖关系。

​ 根源的体现及解决:如果将各种数据集中于一个关系模式中,各对象主键云集,极可能无法全部满足各主键约束等,从而造成异常。

​ 解决异常方法:利用规范化理论,对关系模式进行相应的分解,以消除这些异常。


6.3 函数依赖


6.3.1 函数依赖的定义

​ 为方便定义的描述,先给出如下约定

约定:设R是一关系模式,U是R的属性集合,X、Y








\\subseteq


U,r是R的一个关系实例,元组t








\\in


R。则用t[X]表示元组t在属性集合X上的值。同时,将关系模式和关系实例统称为关系,XY表示X和Y的并集(实际上是X








\\cup


Y的简写)。

​ 函数式决定:y=f(x),说明x→y。

​ 函数依赖定义:设R是一个关系模式,U是R的属性集合,X和Y是U的子集。对于R的任意实例r,r中任意两个元组t1和t2,如果t1[X] = t2[X] 则t1[Y] = t2[Y],那么称X函数地决定Y,或Y函数地依赖于X,记作:X→Y,X称为决定子(Determinant)或决定属性集

​ 函数依赖关心的问题:是一个或一组属性的值决定其他属性的值。


6.3.2 函数依赖分类及其定义

函数依赖类型:


  1. 平凡函数依赖(Trivial FD)
  2. 非平凡函数依赖(NonTrivial FD)
  3. 完全函数依赖(Full FD)
  4. 部分函数依赖(Partial FD)
  5. 传递函数依赖(Transitive FD)

​ 平凡函数依赖:如果Y








\\subseteq


X
,则X→Y称为平凡函数依赖。平凡函数依赖不反映新的语义。

​ 非平凡函数依赖:如果X→Y,且Y不是X的子集,则称X→Y是非平凡函数依赖。如不特别声明,一般总是讨论非平凡函数依赖。

​ 决定属性集/决定子:如果X→Y,则称X为该函数依赖的决定属性集。

​ XY等价:如X→Y,且Y→X,则X与Y一一对应,记作X








\\leftrightarrow


Y

​ 完全函数依赖:设R是一个具有属性集合U的关系模式,如果X→Y,并且对于X的任何一个真子集Z,Z→Y都不成立,则称Y完全函数依赖于X,记作:




X








f



Y



\\mathrm{X} \\stackrel{f}{\\longrightarrow} \\mathrm{Y}


XfY

X=(a, b), Y=(c),如果a








\\nrightarrow


c,b








\\nrightarrow


c,但(a, b)→c,则




X








f



Y



\\mathrm{X} \\stackrel{f}{\\longrightarrow} \\mathrm{Y}


XfY

​ 部分函数依赖:若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作:




X








p



Y



\\mathrm{X} \\stackrel{p}{\\longrightarrow} \\mathrm{Y}


XpY

X=(a, b), Y=(c),如果a→c 或 b→c,则




X








p



Y



\\mathrm{X} \\stackrel{p}{\\longrightarrow} \\mathrm{Y}


XpY

:如果X为单个属性,则X→Y是完全函数依赖还是部分函数依赖?

:如果决定子只有一个属性,则与其有关的函数依赖是完全函数依赖

​ 传递函数依赖:设R是一个具有属性集合U的关系模式,X、Y、 Z








\\subseteq


U,X、Y、Z是不同的属性集。如果X→Y, Y→X不成立, Y→Z,则称Z传递地函数依赖于X。

X→Y,Y








\\nrightarrow


X,Y→Z,则X→Z。

:X→Y,Y








\\nrightarrow


X,Y→Z,但Z→Y,那么X→Z ?

:正确。


6.3.3 函数依赖与属性关系

设R(U)是属性集U上的关系模式,X,Y是U的子集:


  • 如果X和Y之间是1:1关系(一对一关系)则存在函数依赖X→Y和Y→X ,如学号和身份证号之间就是1:1关系,学号->身份证号,身份证号->学号。
  • 如果X和Y之间是m:1关系(多对一关系),则存在函数依赖X→Y ,如学号和班级号之间就是m:1关系,学号->班级号。
  • 如果X和Y之间是m:n关系(多对多关系),如学号和课程号之间就是m:n关系,则X 和Y之间不存在函数依赖。

6.3.4 Armstrong公理系统

问题提出:在关系模式的规范化处理过程中,不仅要知道一个给定的函数依赖集合,还要知道由给定的函数依赖集合所蕴涵(或推导出)的所有函数依赖的集合。为此,需要一个有效而完备的公理系统,Armstrong公理系统即是这样的一个系统。

蕴含定义:设F是R上的函数依赖集合, X→Y是R的一个函数依赖 。如果R的一个关系实例满足F,则必然满足X→Y,则称F逻辑蕴含(Imply) X→Y。

闭包定义:函数依赖集合F所逻辑蕴含的函数依赖的全体,称为F的闭包(Closure), 记为F+

Armstrong公理:为从已知的函数依赖推导出其他的函数依赖,Armstrong提出了一套推理规则,称为Armstrong公理(Armstrong’s Axioms)。

公理包含如下三条推理规则:


  1. 自反律(Reflexivity):若Y








    \\subseteq


    X








    \\subseteq


    U,则X→Y。

  2. 增广律(Augmentation):若X→Y,Z








    \\subseteq


    U,则XZ→YZ。

  3. 传递律(Transitivity) :若X→Y和Y→Z,则X→Z。

引理 1:Armstrong公理是正确的,即:如F成立,则由F根据Armstrong公理所推导的函数依赖总是成立的。

引理 2:如下三条推理规则是正确的:


  1. 合并规则(Union):如果X→Y,X→Z,则X→YZ。
  2. 伪传递规则(Pseudo Transitivity):如果X→Y,YW→Z,则XW→Z。
  3. 分解规则(Decomposition):如果X→Y和Z








    \\subseteq


    Y,则X→Z。或:如X→YZ,则X→Y,X→Z。

6.4 关系模式的规范形式


6.4.1 范式

范式(Normal Form, NF):关系模式的规范形式。

关系模式中的范式:1NF、2NF、3NF、BCNF、4NF和5NF。

范式之间存在的关系或级别:

1NF








\\supset


2NF








\\supset


3NF








\\supset


BCNF









\\supset


4NF









\\supset


5NF

函数依赖范畴 多值依赖范畴 连接依赖范畴

说明:


  1. 1NF级别最低,5NF级别最高。
  2. 高级别范式可以看成是低级别范式的特例。
  3. 一般来说,1NF是关系模式必须满足的最低要求。

范式级别与异常问题之关系:一般,级别越低,出现异常的程度越高。


6.4.2 规范化

规范化:将一个给定的关系模式转化为某种范式的过程称为关系模式的规范化过程,简称规范化(Normalization)。

规范化方法:一般采用分解的办法,将低级别范式向高级别范式转化,使关系的语义单纯化。

规范化目的:逐渐消除异常。

理想的规范化程度:范式级别越高则规范化程度也越高。

实际的规范化操作:


  1. 1NF和2NF一般作为规范化过程的过渡范式。
  2. 规范程度不一定越高就越好。
  3. 设计中一般达到3NF或BCNF即可。

6.4.3 函数依赖范畴的范式


  1. 第一范式(1NF)

    定义:设R是一个关系模式。如果R的每个属性的值域都是不可分的简单数据项的集合,则称该关系模式为第一范式关系模式,记作1NF。

    第一范式仅仅满足了关系属性的原子性,即不允许复合属性的出现。但仍可能出现插入、删除、冗余及更新异常。

  2. 第二范式(2NF)

    定义:若关系模式R是1NF,而且每一个非键属性都完全函数依赖于R的键,则称该关系模式为第二范式关系模式,记作2NF。

    2NF实质:不存在非键属性“部分函数依赖”于键的情况。

    非2NF关系或1NF关系向2NF的转换:消除其中的部分函数依赖,一般是将一个关系模式分解成多个2NF的关系模式。即:将部分函数依赖于键的非键属性及其决定属性移出,另成一关系,使其满足2NF。

    2NF关系可能的异常:仍可能存在插入异常、删除异常、更新异常和冗余。因为,还可能存在“传递函数依赖”。

  3. 第三范式(3NF)

    定义:若关系模式R是2NF,而且它的任何一个“非键属性”都不传递依赖于R的任何候选键,则称该关系模式为第三范式关系模式,记作3NF。

    相对于第二范式,第三范式即为其消除了传递函数依赖后所得到的关系模式。

    3NF关系可能的异常:仍可能存在插入异常、删除异常、更新异常和冗余。因为,还可能存在“主属性”“部分函数依赖”于键。(仅仅保证了非主属性)

  4. BC范式(BCNF)

    BC范式又称增强第三范式,由Boyce和Codd提出而得名,有时也归入第三范式。

    定义:若关系模式R是1NF,如果 对于R的每个函数依赖X→Y, X必为候选键,则R为BCNF范式。

    性质:


    1. 所有非键属性都完全函数依赖于每个候选键;
    2. 所有键属性都完全函数依赖于每个不包含它的候选键;
    3. 没有任何属性完全函数依赖于非键的任何一组属性。

    BCNF与3NF的关系:


    • 如果关系模式R








      \\in


      BCNF,则必定有R








      \\in


      3NF;
    • 如果R








      \\in


      3NF,且R只有一个候选码,则必定有R








      \\in


      BCNF。

    性质:


    1. 所有非键属性都完全函数依赖于每个候选键;
    2. 所有键属性都完全函数依赖于每个不包含它的候选键;
    3. 没有任何属性完全函数依赖于非键的任何一组属性。

    BCNF与3NF的关系:


    • 如果关系模式R








      \\in


      BCNF,则必定有R








      \\in


      3NF;
    • 如果R








      \\in


      3NF,且R只有一个候选码,则必定有R








      \\in


      BCNF。





推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 原文地址http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/最开始时 ... [详细]
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
  • ElasticSearch成功安装完毕。 测试数据添加出现{  error:{    root_cause ... [详细]
author-avatar
yellow start
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有