简述

学习《数据库系统概念》做的笔记

  • 前一篇是ER图以及ER模型相关的
  • E-R模型和E-R图

文章目录

  • 简述
  • 函数依赖
    • 通过函数依赖发现问题
  • 无损分解和有损分解
  • 原子域和第一范式
    • 原子域定义
    • 第一范式定义
  • 使用函数依赖进行分解
    • 超码的定义
    • 关系依赖
    • 平凡的函数依赖
    • 闭包(closure)
    • Boyce-Codd范式(BC范式)
    • 第三范式(3NF)
  • 函数依赖理论
    • Armstrong公理
    • 属性集的闭包
  • 第四范式
    • 多值依赖
    • 第四范式(4NF)
  • 正则覆盖
    • 无关属性
      • 实例
    • 正则覆盖

函数依赖

  • 定义一条规则,“如果存在模式(dept_name, budget),则dept_name可以作为主码”。
  • 这条规则就被定位为函数依赖(functional dependency)

通过函数依赖发现问题

  • 如果存在这样的函数依赖,但是dept_name却不是原来的关系数据库的主码。那么说明有重复的budget信息。

无损分解和有损分解

  • 无损分解:分解之后,再用自然连接的方式组合起来可以恢复为原样。否则就是有损的。

原子域和第一范式

  • 之前在ER模型中讲到了子结构的问题。这里对这种东西做一个思想化。

原子域定义

  • 一个域是原子的,如果该域中的元素被认为是不可分的单元(不存在子结构)。

第一范式定义

  • 我们称一个关系模式R属于第一范式(First normal Form, 1NF),如果R中的所有的元素都是原子的。

使用函数依赖进行分解

超码的定义

  • 旧定义: 可以唯一识别关系中的一条元组的一个或等多个属性的集合
  • 新定义: 令r(R)是一个关系模式。R的子集K是R的超码的条件是
    • 在r (R)的合法实例中,对r的实例中的所有元组对t1t_1t1​和t2t_2t2​,若 t1≠t2t_1 \neq t_2t1​̸​=t2​,则t1[K]≠t2[K]t_1[K] \neq t_2[K]t1​[K]̸​=t2​[K]。

关系依赖

表达式看起来比糅杂,但是意思很简单。

  • 我们说这个实例是满足A->B 这样的函数依赖,就是说,对于这个实例的任两个元组,如果他们的A部分是一样的话,那么B部分也是一样的。

其实跟我们之前讲到的那个例子是完全符合的。

平凡的函数依赖

有些函数依赖是很显然的。

  • 比如:A->A之类的。

闭包(closure)

  • 在一个关系模式上,其实是有很多的函数依赖的。
  • 比如:A->BB-C 就可以知道A->C

给出闭包的概念

  • 就是有一个集合F,能通过F推导出来的所有闭包的集合就是F的闭包。

例如:

  • F = {A->BB-C}
  • 那么, F’ = {A->BB-C, A->C} 是F的闭包

Boyce-Codd范式(BC范式)

  • BC范式比较好,它能消除掉所有的基于函数依赖的冗余

条件非常简单:
基于函数依赖集合F的关系模式R属于BCNF,
对于F闭包中的所有范式a-b,必须要有下面的两个条件满足一个

  • a->b是一个平凡的函数依赖
  • a是函数的超码

其实这是合理的。

  • 如果是超码,当然一点问题都没有。(因为超码本身就会带着一堆的函数依赖)
  • 如果不是超码的话,就必须要保证这个函数依赖是平凡的。(可以理解为没什么影响的

因为平凡的话,是说对任意的关系,这个函数依赖都成立,那。。当然无论你怎么改这玩意都是存在的啦。。当然就不管它啦。

第三范式(3NF)

3NF是相当于BCNF更弱一点的范式。
3NF放宽了点条件

对于F闭包中的所有范式a-b,必须要有下面的三个条件满足一个

  • a->b是一个平凡的函数依赖
  • a是函数的超码
  • b-a中的每一个属性,都包含于R的一个候选码中(可以是每个属性属于不同的候选码)

函数依赖理论

  • 逻辑蕴涵(logically imply),(其实就说有一个函数依赖,可以用一个函数依赖集中的某些东西来推导出来,那么就蕴涵了呗)
  • (所以,就会有闭包的概念出现了)

Armstrong公理

一般来说,大家都是知道这个公理的内容,而记不太住,这个公理的名字。。

  • 自反律,a包含有b,则a->b
  • 增补律,a->bc也是一个属性集,则ac->bc
  • 传递律,a->bb->c,则a->c

Armstrong公理是正确而有效的(sound)。
但是用这个来算闭包实在是太麻烦了。。。

  • 合并律,a->ba->c,则a->bc
  • 分解律,a->bc,则a->ba->c
  • 伪传递律,a->bbc->d,则ac->d

属性集的闭包

  • a->b,我们就说b被a给函数确定
  • 闭包的符号定义A+A^+A+为AAA的闭包

第四范式

多值依赖

多值依赖A->->B条件,对于任意两个满足t1[A] = t2[A]的实例来说,都存在有一个t3和t4,使得

  • t1[A] = t2[A] = t3[A] = t4[A]
  • t3[B] = t1[B] 并且 t3[R-B] = t2[R-B]
  • t4[B] = t2[B] 并且 t4[R-B] = t1[R-B]

第四范式(4NF)

对于在这个范式中,所有的多值依赖(来自整个的闭包)至少有下面中的一个成立

  • A->->B是一个平凡的多值依赖
  • A是超码

正则覆盖

无关属性

  • 将依赖集合F中的某个函数依赖的左边的某个属性去掉之后,任然被之前的F给逻辑蕴含。则这个属性是无关属性。
    类似的定义在右半部分(但是就是去掉后的部分要蕴含原来的F)

实例

  • 比如AB->CA->C在函数依赖集合上,那么B就是无关属性

正则覆盖

  • 去除掉所有的无关属性
  • 然后如果有A->B并且有A->C那么就变成A->BC

关系数据库设计【笔记】相关推荐

  1. 数据库系统概念总结:第八章 关系数据库设计

    周末无事水文章,期末备考的总结资料 第八章 关系数据库设计 8.1 好的关系设计的特点 数据库逻辑设计主要解决的问题: –关系数据库应该组织成几个关系模式 –关系模式中有包括哪些属性 从不良的设计模式 ...

  2. 关系数据库设计理论(函数依赖、异常、范式)、ER图

    1. 关系数据库设计理论 1.1 函数依赖 记 A->B 表示 A 函数决定 B,也可以说 B 函数依赖于 A. 如果 {A1,A2,... ,An} 是关系的一个或多个属性的集合,该集合函数决 ...

  3. close关闭指定窗口 matlab_Δ-Σ ADC设计笔记一:MATLAB环境设置

    本设计笔记其实是研读<SIGMA-DELTA CONVERTERS-Practical Design Guide>--JOSÉ M. DE LA ROSA的笔记,记录一些关键知识以及自己的 ...

  4. 数据库设计笔记——概述(一)

    数据库 数据库(DataBase,DB)是长期存储在计算机内,有组织的,可共享的数据集合.是存放数据的仓库,并且有组织,有管理. 数据库管理系统 数据库管理系统(Database Management ...

  5. 数字电路与逻辑设计笔记

    数字电路与逻辑设计笔记 变量和常量的关系式 根据真值表写表达式 以真值表内输出端"1"为准 第一步:从真值表内找输出端为"1"的各行,把每行的输入变量写成乘积形 ...

  6. 【数据库原理及应用】经典题库附答案(14章全)——第六章:关系数据库设计过程

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

  7. 面向对象的关系数据库设计

    面向对象的关系数据库设计 一.概念的区分 有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS) 理论混为一谈.其实前者是数据库用户定义数据库模式的思路,后者是数据库 ...

  8. 数字电路逻辑设计笔记(3):集成逻辑门电路

    数字电路逻辑设计笔记(3):集成逻辑门电路 新发现一个很好的资源:https://www.bilibili.com/video/BV1ZV411E7W5?p=13 §3.1 概述 一.门电路及其分类 ...

  9. 数字电路逻辑设计笔记(2):逻辑代数基础

    数字电路逻辑设计笔记(2):逻辑代数基础 参考教材:<数字电路逻辑设计>欧阳星明 人民邮电出版社 参考教程: 中国大学MOOC 西安工业大学<数字电子技术基础> 文章目录 数字 ...

  10. 数据库系统概念(机械工业出版社,第六版)复习——第八章:关系数据库设计

    第八章:关系数据库设计 第一范式(1NF) 如果某个域的元素被认为是不可再分的单元,那么这个域就是原子的(atomic).如果一个关系模式R的所有的属性域都是原子的,我们称关系模式R属于第一范式(fi ...

最新文章

  1. CF183D T-shirt
  2. window系统安装redis步骤
  3. 成为阿里 P7 真的难么?
  4. 【机器视觉】 dev_set_line_width算子
  5. CTF加解密/编码常用在线网址
  6. 每日一笑 | 一些关于学编程的领悟
  7. Apache Commons ArrayUtils.toString(Object)与JDK Arrays.toString(Object)
  8. js \n直接显示字符串_显示N个字符的最短时间
  9. mysql表添加完整性约束_SQL语句——完整性约束
  10. server系统万能网卡驱动离线版_科普一分钟|BIOS引导+MBR硬盘格式装系统方法
  11. SCVMM 2012 部署测试之五向SCVMM中添加Hyper-V主机
  12. kali win10双系统_小米win10+kali 双系统
  13. 这一代绝非低智商——读《低智商社会@大前研一》
  14. jsp中空格字符怎么写_jsp多个空格符号怎么打
  15. FPGA+CUYSB3014实现USB3.0功能
  16. 百度搜索引擎结果网址参数 搜索框提示词搜索方式(rsv_sug2)
  17. 通过ADB命令实现App的安装、卸载、覆盖
  18. Android开发 assets目录
  19. c语言间隔输出菱形图案,c语言输出菱形图案
  20. linux查看光纤卡微码版本,各操作系统中查看HBA 光纤卡 WWN 号的方法汇总

热门文章

  1. Android驱动之 Linux Input子系统之TP——A/B(Slot)协议
  2. 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?
  3. 【Python爬虫学习笔记6】JSON文件存储
  4. JUC-ReadWriteLock
  5. 总结的一些json格式和对象/String/Map/List等的互转工具类
  6. 检测数据类型的几种方式
  7. 电商仓储管理水平的五大标准
  8. OneZero第五周第二次站立会议(2016.4.19)
  9. 同事反馈环:为什么度量和会议还不够充分
  10. 【HDU】4405 Aeroplane chess