第八章 关系数据库设计
- 第八章 关系数据库设计
- Pitfalls(陷阱) in Relational Database Design
- Functional Dependencies(函数依赖)
- Normal Forms(范式)
- Decomposition(分解)
- 数据库设计
首先分为五个内容
-
Pitfalls(陷阱) in Relational Database Design
-
Functional Dependencies 函数依赖
-
Normal Forms
-
Decomposition 分解
-
Overall(整体) Database Design Process
Pitfalls(陷阱) in Relational Database Design
Design Goals(设计目标)
-
避免冗余(redundant)
-
保证关系依赖
-
方便检查完整性
大表格容易出现的问题
冗余
-
数据重复(浪费资源)
-
难以更新(明明只想改变一个数据却要更改无数条信息)
信息表征(Representation)问题
如果一个事物的某一类事物不存在,那么该事物的其他数据也无法存储(比如ppt例子中,如果没有人存款那么该银行的名字和地理位置就无法保存)
Functional Dependencies(函数依赖)
定义
就是一个数据集里的a,b两类信息,如果两条数据a相等,一定可以推出b也相等,就称b函数依赖于a,写作:
a→b
比如生活中的身份证与姓名
另外,a和b可以不止一个数据,类似于函数中从单个变量变成了 变量向量
特别的
-
a→a 也就是自己依赖于自己
-
超键也可以看做某个函数依赖
Trivial dependency(平凡依赖)
一个数据的子集依赖于他自己
Transitive dependency(传递依赖)
a→b,b→c得到a→c
Partial dependency(部分依赖)
a→b,部分依赖就是a里面某些类数据去掉这个依赖关系依旧存在
逻辑蕴含
逻辑F成立则逻辑f也成立,那么F蕴含f
Closure of a Set of Functional Dependencies(函数依赖闭包)
把某个函数依赖所有的蕴藏的依赖都挖出来,比如a→a,a→b,b→c得到a→c等等
Armstrong’s Axioms
-
reflexivity(自反律),一个集合能确定它的子集
-
Augmentation(增广率),一个集合左右两边同时增加某类数据依赖依旧成立
-
transitivity(传递率),a→b,b→c得到a→c
求函数依赖闭包的步骤
依次用自反增广传递,直到不再发生变化
additional rules
union
a→b,a→c得到a→bc
decomposition
a→bc得到a→b,a→c
pseudotransitivity
a→b,bc→d得到,ac→d
Closure of Attribute(属性集合闭包)
a的属性集合闭包就是a能推出的所有属性(包括自己)
求法:依旧迭代直到不发生变化
用处
- 测试超键
- 测试依赖
- 计算函数依赖闭包
Equivalent FD Sets
两个集合的闭包互相包含则二者等价(跟离散数学类似)
Cononical Cover/Minimal Cover(最小/正则覆盖)
没有冗余项,冗余包括某个函数关系可以由别的推出来或者函数两边可以去掉某些项
Extraneous Attributes(无关属性)
去掉某属性对闭包无影响
Normal Forms(范式)
第一范式
没啥特别的,基本都至少是第一范式
第二范式
非键属性完全依赖候选键,也就是不能有部分依赖
如果有多个候选键,那么候选键里的属性都是键属性,但计算依赖的时候对每一组候选键与非候选键进行匹配
第三范式
在第二范式的基础上,非键属性不传递依赖于候选键
BC范式
每个属性不部分依赖也不传递依赖于候选键(从第三范式的非键属性上升到所有属性)
Decomposition(分解)
分解原则
不丢失元素,不丢失关系,分解的部分重新合起来后与原来的一样
判断分解是否正确
Lossless-join
分解集合的交集至少可以成为某一个集合的候选键(类似数据库中的外键)
Dependency Preservation
判断依赖是否丢失
在各个分解集中求属性闭包(迭代计算),最后合起来看与最初的是否一样
查看例题
第三范式分解方法
1.求出最小依赖
2.为每个关系都分解一个子集
3.为候选键单独设一个子集(如果上面的子集里没有一个包含了候选键)
BC范式分解
1.求出最小依赖
2.将存在候选键和一个候选键中的元素都不存在的关系分出来
3.继续分解直到关系左边全部是候选键
书上的算法:
概括一下就是依次取集合并把右边的元素从剩余的元素里去掉
另外,并不是所有的集合都可以做BC分解
数据库设计
第一选择,BC范式 如果不行则选择第三范式