关系数据库设计
好的关系设计的特点
-
特点:具有较高的信息密度,即用更少的数据展示更多的信息(尽量避免冗余)
1.更大的模式:通常指把多个关系模式合并成一个关系模式,减少查询时的连接,使得对信息的把控更加直观(毕竟一个表包含了太多信息了)但这同时带来了新的问题,比如把instructor和department模式合并为inst_dept
inst_dept (ID, name, salary, dept_name, building, budget)
看似可以更加直观的获得某个老师所在的学院以及办公地点,但是(building,budget)是被dept_name所决定的,即dept_name相同,building和budget也即相同,这样就导致了大量的数据冗余,因为学院就那么几个,但是老师的数量却是相当多的。
同时当我们创建一个新的学院时,必须得在有一个老师的情况下才能插入数据,这也是我们不想看到的
2.更小的模式:通常是指把一个关系模式分解成多个关系模式,减少数据的冗余
同样也带来了新的问题,即有损连接和无损连接

恰如此图,分解之后重新自然连接后是数据出现了错乱(有损连接)
书中读到此处时我想的是如果分解的共同属性(name)是超码的话就不会出现损失,即无损连接。其实后续书中对无损连接的条件做出了更详细的解释
原子域和第一范式
1.一个域是原子的(atomic),如果该域的元素被认为是不可分的单元。
2.一个域是原子的,如果该域的元素被认为是不可分的单元,若关系模式R中所有属性的域都是原子的,则称该关系模式为第一范式(简单理解其实就是没有多值属性和组合属性,如何消除多值属性和组合属性在前面一章中有所提及)
函数依赖
1.定义:书上写的太专业了,简单理解就是决定关系,属性a→b,若a相同,则b一定相同
- 平凡函数依赖
α→α
α→β,if β⊆α - 集合闭包
即从给定集合F中推导出的所有函数依赖集合(F本身也是函数依赖集合) - BCNF
对于给定模式R的所有函数依赖集合
1.α→β,β⊆α
2.α是模式R的一个超码
BCNF能消除所有冗余(简单说其实就是尽量增强的主码的核心性,使得R中只有主码能决定其他属性是否相同)
因此我们如果想要获得一个BCNF范式需要把多余的依赖给消除掉,即把一个关系模式分解为多个关系模式,但是分解途中我们有时会丢失掉某些有用的函数依赖,为了保持函数依赖,我们不得不考虑一个对函数依赖要求更低的范式,即3CNF。 - 3CNF
1.α→β,β⊆α
2.α是模式R的一个超码
3.β-α的每个属性A都包含于的R一个候选码中(不用非得都在某一个候选码中,只要所有的候选码包含这些属性即可)
注:满足BCNF的模式也满足3CNF
函数依赖理论


- 属性集的闭包
即将当前属性集与属性集内的属性所决定的属性的合并(太绕了)

浙公网安备 33010602011771号