关系数据库设计【笔记】
简述
学习《数据库系统概念》做的笔记
- 前一篇是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->B
,B-C
就可以知道A->C
。
给出闭包的概念
- 就是有一个集合F,能通过F推导出来的所有闭包的集合就是F的闭包。
例如:
- F = {
A->B
,B-C
} - 那么, F’ = {
A->B
,B-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->b
且c
也是一个属性集,则ac->bc
- 传递律,
a->b
且b->c
,则a->c
Armstrong公理是正确而有效的(sound)。
但是用这个来算闭包实在是太麻烦了。。。
- 合并律,
a->b
且a->c
,则a->bc
- 分解律,
a->bc
,则a->b
且a->c
- 伪传递律,
a->b
,bc->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->C
和A->C
在函数依赖集合上,那么B就是无关属性
正则覆盖
- 去除掉所有的无关属性
- 然后如果有
A->B
并且有A->C
那么就变成A->BC
关系数据库设计【笔记】相关推荐
- 数据库系统概念总结:第八章 关系数据库设计
周末无事水文章,期末备考的总结资料 第八章 关系数据库设计 8.1 好的关系设计的特点 数据库逻辑设计主要解决的问题: –关系数据库应该组织成几个关系模式 –关系模式中有包括哪些属性 从不良的设计模式 ...
- 关系数据库设计理论(函数依赖、异常、范式)、ER图
1. 关系数据库设计理论 1.1 函数依赖 记 A->B 表示 A 函数决定 B,也可以说 B 函数依赖于 A. 如果 {A1,A2,... ,An} 是关系的一个或多个属性的集合,该集合函数决 ...
- close关闭指定窗口 matlab_Δ-Σ ADC设计笔记一:MATLAB环境设置
本设计笔记其实是研读<SIGMA-DELTA CONVERTERS-Practical Design Guide>--JOSÉ M. DE LA ROSA的笔记,记录一些关键知识以及自己的 ...
- 数据库设计笔记——概述(一)
数据库 数据库(DataBase,DB)是长期存储在计算机内,有组织的,可共享的数据集合.是存放数据的仓库,并且有组织,有管理. 数据库管理系统 数据库管理系统(Database Management ...
- 数字电路与逻辑设计笔记
数字电路与逻辑设计笔记 变量和常量的关系式 根据真值表写表达式 以真值表内输出端"1"为准 第一步:从真值表内找输出端为"1"的各行,把每行的输入变量写成乘积形 ...
- 【数据库原理及应用】经典题库附答案(14章全)——第六章:关系数据库设计过程
[数据库原理及应用]经典题库附答案(14章全)--第一章:数据库基础知识 [数据库原理及应用]经典题库附答案(14章全)--第二章:关系数据库知识 [数据库原理及应用]经典题库附答案(14章全)--第 ...
- 面向对象的关系数据库设计
面向对象的关系数据库设计 一.概念的区分 有些人把面向对象的数据库设计(即数据库模式)思想与面向对象数据库管理系统(OODBMS) 理论混为一谈.其实前者是数据库用户定义数据库模式的思路,后者是数据库 ...
- 数字电路逻辑设计笔记(3):集成逻辑门电路
数字电路逻辑设计笔记(3):集成逻辑门电路 新发现一个很好的资源:https://www.bilibili.com/video/BV1ZV411E7W5?p=13 §3.1 概述 一.门电路及其分类 ...
- 数字电路逻辑设计笔记(2):逻辑代数基础
数字电路逻辑设计笔记(2):逻辑代数基础 参考教材:<数字电路逻辑设计>欧阳星明 人民邮电出版社 参考教程: 中国大学MOOC 西安工业大学<数字电子技术基础> 文章目录 数字 ...
- 数据库系统概念(机械工业出版社,第六版)复习——第八章:关系数据库设计
第八章:关系数据库设计 第一范式(1NF) 如果某个域的元素被认为是不可再分的单元,那么这个域就是原子的(atomic).如果一个关系模式R的所有的属性域都是原子的,我们称关系模式R属于第一范式(fi ...
最新文章
- CF183D T-shirt
- window系统安装redis步骤
- 成为阿里 P7 真的难么?
- 【机器视觉】 dev_set_line_width算子
- CTF加解密/编码常用在线网址
- 每日一笑 | 一些关于学编程的领悟
- Apache Commons ArrayUtils.toString(Object)与JDK Arrays.toString(Object)
- js \n直接显示字符串_显示N个字符的最短时间
- mysql表添加完整性约束_SQL语句——完整性约束
- server系统万能网卡驱动离线版_科普一分钟|BIOS引导+MBR硬盘格式装系统方法
- SCVMM 2012 部署测试之五向SCVMM中添加Hyper-V主机
- kali win10双系统_小米win10+kali 双系统
- 这一代绝非低智商——读《低智商社会@大前研一》
- jsp中空格字符怎么写_jsp多个空格符号怎么打
- FPGA+CUYSB3014实现USB3.0功能
- 百度搜索引擎结果网址参数 搜索框提示词搜索方式(rsv_sug2)
- 通过ADB命令实现App的安装、卸载、覆盖
- Android开发 assets目录
- c语言间隔输出菱形图案,c语言输出菱形图案
- linux查看光纤卡微码版本,各操作系统中查看HBA 光纤卡 WWN 号的方法汇总
热门文章
- Android驱动之 Linux Input子系统之TP——A/B(Slot)协议
- 前端遍历导致查询数据时间过长_OLAP 服务器,空间换时间可行吗?
- 【Python爬虫学习笔记6】JSON文件存储
- JUC-ReadWriteLock
- 总结的一些json格式和对象/String/Map/List等的互转工具类
- 检测数据类型的几种方式
- 电商仓储管理水平的五大标准
- OneZero第五周第二次站立会议(2016.4.19)
- 同事反馈环:为什么度量和会议还不够充分
- 【HDU】4405 Aeroplane chess