6.1 问题的提出

关系模式是一个5元组
R U,D,DOM,F
U 属性
D 域
DOM 属性到域的映射
F 依赖
在本章中将关系模式看作 三元组 R U,D 属性-依赖

1NF 每一个分量是不可分割的数据项

定义:
数据依赖是 一个关系内部属性与属性的一种约束关系
这种关系是通过属性间的相等与否体现出来的数据间相关联系

数据依赖的类型: 函数依赖 functional dependency fd
多值依赖 multi-Valued dependency mvd

最原始的数据模式 会出现以下问题:

数据冗余

更新异常( 某系更换主任后,要修改所有学生的信息)

插入异常(某系刚成立,还没有学生 ,无法插入)

删除异常(学生全部毕业,系主任也没有了)

6.2 规范化

6.2.1 函数依赖

X->Y X确定Y

X->Y 但是Y不在X里面 叫做 非平凡的函数依赖
X-> Y 但是Y在X里面 叫做平凡的函数依赖(一般不予考虑)

x->Y X 称为 决定因素 determinant

定义:
x->Y 但是没有任何一个X的子集有 X'->Y Y 对 X 完全函数依赖 X-f->Y

如果存在相应的子集 那么 Y对X 部分函数依赖 X-p->Y
依赖存在传递性

Y 依赖X X不依赖Y
Z 依赖 Y

Z传递依赖X

6.2.2 码

码是关系模式中一个重要的概念
K-f->U K为R的候选码

如果K-p->U 那么K是超码 Surpkey

候选码是最小的超码

候选码多于一个 选定一个为主码

整个属性组是码 称为全码all-key

6.2.3 范式

schema decompositon 分解为高一级的范式
过程称为规范化 normalization

6.2.4 2nf

每一个非主属性完全依赖于一个候选码 (满足2nf)

问题的关键在于 所有非主属性必须对码 完全函数依赖

6.2.5 3nf

不存在传递依赖的关系模式

6.2.6 bcnf

每一个决定因素都包括码

一个 学生 教师 课程 S-T-J 满足 3nf 没有传递依赖 但是 T 作为决定因素 T决定J 却不是码 码是 S-T 或者S-J
一个课程对应多个老师多个学生

6.2.7 多值依赖

R(U)
XYZ 是U的子集

如果 Z= U -X-Y

并且 给定的x,z 有一个Y 并且与z的值无关 那么记为 X->->Y 多值依赖
如果z 为空 称为平凡的多值依赖

1 多值依赖是 对称的 X->->Y 那就就有 X->->Z
2 多值依赖具有传递性 X->->Y Y->->Z X->->Y-Z
3 函数依赖可以看作多值依赖的特殊情况

6.2.8 4nf

对于R中的每个非平凡多值依赖,如果X->->Y 那么X中包含码

不允许有非平凡的多值依赖

只允许平凡的多值依赖

6.2.9 规范化小结

消除非主属性对码的部分函数依赖

消除非主属性对码的传递函数依赖

消除主属性对码的 部分和传递依赖

消除非平凡(且非函数依赖)的多值依赖

6.3 数据依赖的公里系统

Armstrong
自反率
增广率
传递率

合并规则
伪传递规则
分解规则
引理6.1 X->A1A2A3... 的充分必要条件是X->Ai 成立

F所逻辑蕴含的函数依赖的全体称为 F的闭包 closure
证明暂略

6.4 模式的分解

分解具有 无损连结性

分解要保持函数依赖

算法 6.2 判断是否无损连接
每一行对应一个子关系
每一列对应一个属性
列表法

定理 6.5

对于 RUF 的一个分解 R1 U1 F1 R2 U2 F2 如果有 U1交U2 -> U1 -U2 公共属性可推出 一个中的一切

6.4.3 模式分解的几个具体的算法

算法 6.3 保持3NF函数依赖的处理 合成法
1 对于 RUF 中F 的函数依赖做极小化处理
2 找出所有不在 F 中的属性, U0 这些 U0 单独构成一个子关系 U中去掉U0
3 如果X->A 属于 F 并且 AX=U 算法停止
4 否则 将F 按照左边属性 分类 将每一组分类 都构成一个子关系 3NF 不存在对码的传递依赖和部分依赖
这里分组的时候 有可能一个组 被另外一个组 包含 ,就把被包含的组去掉即可

算法6.4 保持无损连接性 的3nf 分解

在6.3 的基础上添加一个子关系 R(XFx) 这里X是一个码

如果 原来分解的子模式中有一个 U 属于X 那么就去掉那个子模式
如果有一个 U包含 X 那就不添加这个子模式

这样就保证了 无损连结性 ( 因为保证了 其中有一个 子模式中 包含 码) 通过这个嘛 我们就可以无损连接整个关系模式了

算法 6.4 转换为 bcnf 的分解方式
分解法
对于每一个不是 bcnf 的 子模式 存在 X->A X不是码
就吧 X->A分解出去
bcnf : 所有的决定因素 都是码

算法 6.6 达到 4nf的分解
先分解到 bcnf ,然后对于每一个非平凡的多值依赖 X->->Y 进行分解 X,Y X,Z Z=U-X-Y

关系数据库理论 ch.6的更多相关文章

  1. Data Management Technology(4) -- 关系数据库理论

    规范化问题的提出 在规范化理论出现以前,层次和网状数据库的设计只是遵循其模型本身固有的原则,而无具体的理论依据可言,因而带有盲目性,可能在以后的运行和使用中发生许多预想不到的问题. 在关系数据库系统中 ...

  2. 关系数据库(ch.2)

    2.1.1 关系 域 笛卡儿积 关系 candiate key 如果一组属性值可以唯一的标识一个元祖,但是他的子集不行,那么这是一个候选码 关系可以由三种类型 基本关系 查询关系 视图 为关系附加如下 ...

  3. 转!!数据库 第一范式(1NF) 第二范式(2NF) 第三范式(3NF)的 联系和区别

    范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中 ...

  4. 浅析Oracle范式的概念(转载)

    范式:英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出来的,范式是关系数据库理论的基础,也是我们在设计数据库结构过程中 ...

  5. T-SQL动态查询(3)——静态SQL

    接上文:T-SQL动态查询(2)--关键字查询   本文讲述关于静态SQL的一些知识和基础技巧. 简介: 什么是静态SQL?静态SQL是和动态SQL相对而言的,其实我们没必要过于纠结精确定义,只要大概 ...

  6. T-SQL动态查询(1)——简介

    起因: 由于最近工作需要及过去一直的疑问,所以决定着手研究一下动态SQL.由于离开一线开发有点年头了,很多技巧性的东西没有过多研究,作为DBA和<SQL Server性能优化与管理的艺术> ...

  7. 如何成为一个优秀的DBA

    今天在群上跟技术友们聊天.发现有几个大学生,他们很担心自己找不到工作.我问他们理由,他们说我们没有经验,公司不要怎么办?这些孩子们的担心,让我感觉到奇怪. 如果我是一个公司的老总,我会有这两种考虑:要 ...

  8. 理解ORM的前提:数据库中的范式和约束

    理解ORM的前提:数据库中的范式和约束 一.数据库中的范式: 范式, 英文名称是 Normal Form,它是英国人 E.F.Codd(关系数据库的老祖宗)在上个世纪70年代提出关系数据库模型后总结出 ...

  9. Microsoft Office Access

    Microsoft Office Access各版本下载地址:http://www.accessoft.com/download.html 简介 access(微软发布的关联式数据库管理系统)一般指M ...

随机推荐

  1. NFS+mou

    前言 有两台电脑,Linux操作系统,服务器和客户端,IP不同,但是可以相互访问. 客户端想访问服务器的文件系统 准备工作 假设 服务器的ip为 192.168.0.100,要分享为公共文件夹的目录为 ...

  2. echarts高级

    常用,待续... ♣tooltip自动轮播 ♣ 实现数据自动轮播 原理:其实就是timeline,获取某几段(时间)的数据,然后隐藏timeline ♣ legend自动轮播 ♣ 左侧多字出省略号 f ...

  3. Git婴幼儿使用手册【十分钟让你帅气的使用命令行和团队工作】

    Git由来:...... Git使用的好处:...... 如何使用Git:(以上会显得我们以下的是很纯纯的干货) 代码库有两个部分: 本地代码库:远程代码库: 本地代码库使用方法: 一.先创建一个文件 ...

  4. iOS之CGAffineTransform属性详解和方法使用

    1.CGAffineTransform简介 UIView有个属性transform,是CGAffineTransform类型.可以使其在二维界面做旋转.平移.缩放单独或者组合动画! CGAffineT ...

  5. shell脚本实现读取一个文件中的某一列,并进行循环处理

    shell脚本实现读取一个文件中的某一列,并进行循环处理 1) for循环 #!bin/bash if [ ! -f "userlist.txt" ]; then echo &qu ...

  6. [原创]Java调用PageOffice给Word中的Table赋值

    Word中的table操作需要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table.因此,要想使用table,则必须在w ...

  7. java主函数参数传递args

    a.javaJava应用程序的主入口方法main(String[] args),表示该方法需要接收一个字符串数组类型的参数, 如果该参数不指定,agrs接收的是null. 程序:   public C ...

  8. <数据库>MySQL的安装及安装中存在的问题

    无脑三连: 下载:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 解压:任意目录 添加环境变量:WIN10步骤 我的电脑→属性→高级系 ...

  9. [转]C#中的委托和事件(续)

    源码下载:http://www.tracefact.net/SourceCode/MoreDelegate.rar C#中的委托和事件(续) 引言 如果你看过了 C#中的委托和事件 一文,我想你对委托 ...

  10. [编织消息框架][netty源码分析]11 ByteBuf 实现类UnpooledHeapByteBuf职责与实现

    每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...