关系数据理论

问题的提出

关系数据库逻辑设计

  • 具体问题构造适合数据库模式
  • 数据库逻辑设计的工具————关系数据库的规范化理论

概念回顾

  • 关系
  • 关系模式
  • 关系数据库
  • 关系数据库的模式

关系模式的形式化定义

  • 五元

什么是数据依赖

  • 完整性约束的表现形式

    • 限定属性的取值范围(要求范围)
    • 定义属性值之间的相互关联(主要判断是否相等),这就是数据依赖,是数据库模式开发的关键
  • 数据依赖
    • 通过一个关系中属性间值的相等与否体现出来的数据间的相互关系
    • 是现实世界属性间的相互关系‘
  • 数据依赖的类型
    • 函数依赖(FD)
    • 多值依赖(MVD)*
    • 其他(如连接依赖)

关系模式的简化表示

  • 关系模式R(U,D,DOM,F),简化为一个三元组:R(U,F)
  • 一个约束F(…)

数据依赖对关系模式的影响

  • F={Sno–>Sdept,Sdept–>Mname,(Sno,Cname)–>Grade}:属性组U上的一组函数依赖F----关于候选码???!!!

    • 关系模式Student<U,F>中存在的相关问题:

      • 数据冗余太大

        • 浪费大量的存储空间
      • 更新异常
        • 数据冗余,工薪数据是,维护数据完整性代价太大
      • 插入异常
        • 该插的数据插不进去
      • 删除异常
        • 不该删除的数据不得不删除
  • 结论
    • Student关系模式不是一个好的模式
    • “好”的模式:不会发生插入异常,删除异常、更新异常,数据冗余应尽可能少
    • 原因:

规范化

函数依赖

  • 定义

平凡函数依赖和非平凡函数依赖

  • 总是讨论非平凡函数依赖(因为平凡函数依赖是一定成立的,无意义)

完全函数依赖和部分函数依赖

  • 定义

传递函数依赖

  • 定义
  • 注:如果Y–>X,即X<–>Y,即X和Y是完全依赖的

  • 定义

    • 候选码、主码(码并不等价于主属性)
    • 主属性和非主属性
    • ALL KEY(无非主属性,只有主属性)
    • 外部码
      • 主码与外部码

范式

  • 定义
  • 各范式之间存在联系1>2>3>BC>4>5(属于)5NF最高

2NF

  • 1NF的定义(基本要求)
  • 例子:
    存在码
    满足第一范式
    非主属性部分依赖于码

    • 原因:Sdept、Sloc部分函数依赖于码
    • 解决方式:SLC分解为两个关系模式,以消除部分函数依赖。
  • 2NF定义(消除1NF中,非主属性的对码的部分函数依赖)
  • 第二范式(续):分解1NF至2NF,可能消除不了异常

3NF

  • 定义(在2NF基础上,不存在非主属性对传递函数依赖)
  • 解决方式:采用投影分解法,把SL分解为两个关系模式,以消除传递函数依赖:SD(Sno,Sdeot) DL(Sdept,Sloc)
  • 续:并不一定能完全消除关系模式中各种异常情况和数据冗余.

BC范式(BCNF)

  • 定义(解决候选码之间的部分函数依赖或传递函数依赖)

    • 在3NF的基础下
    • 每一个决定属性集都包含码
    • R中的所有属性都完全依赖于码
    • 若R∈3NF,不一定属于BCNF
  • 3NF和BCNF的区别
  • BCNF的关系模式所具有的性质
    • 1
    • 2
    • 3

多值依赖与第四范式(4NF)*

  • 对全码关系问题:产生原因:存在多值依赖

多值依赖

  • 多值依赖的性质

    • 具有对称性
    • 具有传递性
    • 函数依赖是多值依赖的特殊情况
    • 若X多值依赖于Y,X多值依赖于Z,则X多值依赖于Y并Z
    • 5
    • 6
  • 多值依赖于函数依赖的区别
    • 有效性
    • 若函数依赖X–>Y在R(U)上成立,则对于Y是Y的子集,则X–>Y

4NF

  • 定义

规范化

  • 将低一级范式的关系模式,通过模式分解将其转换为高一级的关系模式范式,这一过程为关系模式的规范化。

规范化的基本思想

  • 消除不合适的数据依赖
  • 是个关系达到某种程度的分离
  • 采用“一事一地”的模式的设计原则
  • 概念的单一化

数据库(续):

  • 不是越规范约好
  • 要符合实际,符合用户需求
  • 可在规范化步骤的任意步终止

数据依赖的公理系统

  • 如何判断关系的范式

    • 找出所有的函数依赖,确定码
  • 如何判定关系的码
  • 定义6.11
  • 定义6.12

逻辑蕴含

Armstrong公理系统

  • 直接推理所得

    • 自反律
    • 增广律
    • 传递律
  • 间接推理所得
    • 合并律
    • 分解律
    • 伪传递律
  • Armstrong公理的有效性和完备性

闭包的计算(重点)

  • 只要该属性集的闭包包含关系的所有属性,却该属性集的每个这跟自己的闭包不包含关系的所有属性。那么该属性集就为候选码

函数依赖的等价和覆盖(极小覆盖计算)

模式的分解

  • 可有多种分解方式
  • 分解是从低等级分解成高等级

关系模式的分解标准

  • 分解具有无损连接性
  • 分解要保持函数依赖
  • 分解既要保持函数依赖,又要具有无损连接性

模式的分解(续)

  • 分解后的数据库丢失了许多信息
  • 如果能通过自然连接,连接分解后的表,表示原来的信息,那这是没有丢失信息

具有无损连接性的模式分解

小结

  • 两种都保证的话,可保证一定达到3NF,但不一定达到BCNF。
  • 规范化理论为数据库设计提供了理论的指南和工具
    • 也仅仅是指南和工具
    • 要考虑用户的需要

数据库——关系数据理论学习笔记相关推荐

  1. 数据库——关系数据理论

    目录 一.问题提出 数据依赖与冗余 二.函数依赖 2.1定义 2.2函数依赖类型

  2. 【数据库系统设计】关系数据理论(函数依赖、码、范式、模式分解)

    关系数据理论 6.1 为什么要学习关系数据理论 什么是好的数据库逻辑设计 什么是数据依赖 关系模式的简化表示 6.2 规范化 - 关系的规范化理论 6.2.1 函数依赖 1.函数依赖 2.平凡函数依赖 ...

  3. 《R数据科学》学习笔记|Note8:使用dplyr处理关系数据

    使用dplyr处理关系数据 往期文章 <R数据科学>学习笔记|Note1:绪论 <R数据科学>学习笔记|Note2:使用ggplot2进行数据可视化(上) <R数据科学& ...

  4. 【数据库原理及应用】经典题库附答案(14章全)——第五章:关系数据理论

    [数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...

  5. 数据库实验报告 创建学生关系数据表、课程表、选课表 SQL Kingbase

    一.实验题目 已有条件:Kingbase数据库软件包. 要求:请安装Kingbase数据库软件,在数据库软件中创建一个自己名字的模式,在该模式下创建学生关系数据表.课程表.选课表. 插入一些数据,尝试 ...

  6. 当且仅当函数依赖a→b在r上成立_数据库第06章关系数据理习题课.ppt

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbsp数据结构与算法 数据库第06章关系数据理习题课.ppt36页 本 ...

  7. 【2 - 数据库是如何存储数据的】Sql Server - 郝斌(字段、记录、表;图形化界面及sql语句建表;六种约束;一对一、一对多、多对多、数据库关系图;主外键)

    课程地址:数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili 目录 数据库是如何解决数据存储问题的 1. 表的相关数据 2. create tab ...

  8. 【数据库和SQL学习笔记】1.SQL语言的功能和特点,数据定义语言和应用,主键和外键

    本专栏是我对数据库系统和SQL语言的学习笔记分享~ 数据库系统软件:SQL Server 2019 Express(免费,初学者使用足够,足够部署小型项目) 操作系统:Windows 10 安装过程略 ...

  9. 【数据库】关系数据理论习题及解析

    一.选择题 1. 为了设计出性能较优的关系模式,必须进行规范化,规范化主要的理论依据是( A) . A. 关系规范化理论 B. 关系代数理论 C.数理逻辑 D. 关系运算理论 2. 规范化理论是关系数 ...

最新文章

  1. 三流Java搞技术,二流Java搞框架,一流Java…
  2. 深度学习 vs. 概率图模型 vs. 逻辑学
  3. Python自动化一--接口测试基础知识,jmeter操作介绍
  4. Mybatis字段模糊查询
  5. dubbo 内存溢出怎么处理_关于 Dubbo 的重要入门知识点总结
  6. 并发编程之 Semaphore 源码分析
  7. java ==号比较String字符串的地址
  8. Hadoop 跨集群复制文件
  9. Ubuntu 发布迁移手册,拉拢 Windows 7 用户
  10. jmeter压力测试
  11. 迅雷2019校园招聘 内推码
  12. 使用微软官方升级工具升级win11的方法
  13. mySQL基础之常见函数
  14. 在WordPress中使用旋转文字创建“会话”横幅:第1部分
  15. 聊聊办公室装修适合哪些风格以及装修技巧
  16. NV21 to NV12(YUV420SP)
  17. 软件开发实训(720科技)――第十课 Axure教程
  18. 山贼集团 (group)
  19. 咖啡技术培训:9款网红咖啡制作配方合集,简单快速
  20. 手把手教你创建个人微信公众号

热门文章

  1. 人工智能感知技术是机器人应用支撑技术之一
  2. 21个php常用方法汇总
  3. java 可变 不可变_java中的不可变类型的探究
  4. mysql数据库创建表时通过设置什么属性可以设置字段编号自动增加_Mysql数据库创建表样例和解释...
  5. Vue自定义组件封装及使用Excel
  6. Vue中computed 计算机属性、getter、setter
  7. vue router-view 匹配路由后,第一次可以点击,再次点击同一个路由无响应,如何处理?
  8. python困境_学习 Python 编程的三种困境
  9. Helm 3 完整教程(二十二):如何设置 Chart 安装完成后提示 NOTE 信息
  10. 2021 年百度之星·程序设计大赛 - 初赛二 1005 水题(贪心结论)