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. HDU - 6128

    题意略: 题解:二次剩余板子题 //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pragma GCC optimize(4) //#pra ...

  2. HTML和css简单日常总结

    今天主要学习了两个部分:第一部分html:在w3school学习了一些标签的使用和一些属性和方法,例如一些标签<a>,<h1><h6><from>< ...

  3. Java-MyBatis-MyBatis3-XML映射文件:缓存

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:缓存 1.返回顶部 1. 缓存 MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制. 为了使它更 ...

  4. solusvm 主控端迁移

    难点在于solusvm被控端已经开了小鸡的情况. 备份数据库: #!/bin/sh ## Vars CONF=/usr/local/solusvm/includes/solusvm.conf FILE ...

  5. SpringCloud学习笔记(五):Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...

  6. Docker系列(十六):搭建Openshift环境

    目的: 搭建Linux下的Openshift环境. 参考资料: 开源容器云OpenShift 构建基于Kubernetes的企业应用云平台 ,陈耿 ,P253 ,2017.06 .pdf 下载地址:h ...

  7. centos7中给Elasticsearch5 安装bigdesk

    系统:centos7 elasticsearch:5.2.2 安装步骤 步骤 由于elasticsearch不再建议支持插件的安装方式.建议作为独立的程序来安装类似于bigdesk.head. 以前都 ...

  8. spring retry 重试机制完整例子

    public static Boolean vpmsRetryCoupon(final String userId) { // 构建重试模板实例 RetryTemplate retryTemplate ...

  9. fastjson对Date类型的格式化

    @JSONField(format="yyyy-MM-dd HH:mm:ss.SSS") private Date sendMqDate; //MQ发送时间

  10. Python学习之--函数/生成器/装饰器

    Function,函数,主要是为了:1提高代码的复用程度,2将程序模块化. 定义函数 在Python中,使用def 用来定义函数,一般函数的定义如下: def name(arg1,arg2,....) ...