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. csp-s模拟测试61砖块, 数字,甜圈题解

    题面:https://www.cnblogs.com/Juve/articles/11626350.html 砖块: 直接模拟即可,map统计被覆盖的次数 #include<iostream&g ...

  2. 【自家测试】2017-12-16 FJOI2016 d1

    1. 所有公共子序列问题(allcs.pas/c/cpp)★问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列.确切地说,若给定序列X= x 1 x 2 ... x m ,则另一序列Z ...

  3. Java英语面试题(核心知识篇)

    Java英语面试题(核心知识篇) Question: What is transient variable?Answer: Transient variable can't be serialize. ...

  4. 【JEECG-Boot 技术文档】新手入门教程

    Jeecg-Boot入门教程必看(新手学习) 1.开发环境搭建 http://jeecg-boot.mydoc.io/?t=345670 开发工具 :https://pan.baidu.com/sha ...

  5. Jetty启动配置解析

    目录 1. jetty概述 2. spring-jetty启动配置 1. jetty概述 维基百科:Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器. Jetty Serv ...

  6. MySQL Server Logs

    日志记录存储方式 #日志记录存储方式 mysql> show variables like 'log_output'; mysql> set global log_output='FILE ...

  7. springboot整合rabbitMQ时遇到的消息无法入列问题

    问题描述: 对列和交换器配置如下(绑定的正常交换器的key是“convert”): 管理平台上手动发是可以的: 而通过程序发消息不行,根本没有进入队列: 解决:显式指定交换器(备选交换器和死信交换器都 ...

  8. iTerm2配色和去掉profile提示框

    效果: 配色方案代码地址: https://github.com/mbadolato/iTerm2-Color-Schemes 点击最右边的绿色区域,再点击  “import”, 打开刚下载解压好的文 ...

  9. 廖雪峰Java11多线程编程-1线程的概念-2创建新线程

    Java语言内置多线程支持: 一个Java程序实际上是一个JVM进程 JVM用一个主线程来执行main()方法 在main()方法中又可以启动多个线程 1.创建新线程 1.1 方法一:使用Thread ...

  10. Inoic 滚动条问题

    1.看图说话 2.没有超过一个页,怎样去掉图中的滚动条? 3修改后预览效果