关系数据库设计
8.1 好的关系设计的特点
函数依赖:
有损分解与无损分解:
8.2 原子域 与 第一范式
-
域是原子的:
域的元素被认为是不可分的单元 -
关系R属于第一范式:
R的所有属性的域都是原子的。存在组合属性、多值属性的关系不符合第一范式 -
如何处理非原子值:
对于组合属性:让每个子属性本身成为一个属性
对于多值属性:为多值集合中的每个项创建一条元组 -
原子性 实际上是由域元素在数据库中如何被使用决定的
8.3 使用函数依赖进行分解
-
属性集:
用希腊字母表示属性集例如 α \alpha α
小写的r表示有可能是模式也可能不是模式的属性集
大写的R是简化的表示用法 -
关系模式:
r ( R), 表示关系r,属性集R
-
当属性集是一个超码:
用K表示,K是r ( R )的超码
-
超码:
可以唯一标识关系中一条元组的一个或多个属性的集合 -
使用函数依赖表示不能用超码表示的约束:
-
函数依赖是平凡的:
函数依赖,在所有关系中都满足则称为平凡的(trivial) -
给定函数依赖集F
F集合的闭包:
即能从给定F集合推到出的所有函数依赖的集合
8.3.2 Boyce-Codd 范式
模式分解
将inst_dept (ID, name, dept_name, salary, building, budget)分解为:
instructor (ID, name, dept_name, salary)
department (dept_name, building, budget)
原模式®的所有属性都必须出现在分解后的( R 1 R_1 R1, R 2 R_2 R2)中:R= R 1 R_1 R1 并 R 2 R_2 R2
-
分解不属于BCNF的模式 的一般规则:
当分解不属于BCNF的模式时,产生的模式中可能有一个或多个不属于BCNF。需要进一步分解,最终结果是一个BCNF模式集合
8.3.3 BCNF和保持依赖
表达数据库一致性约束的方式:
主码约束、函数依赖、check约束、断言和触发器
8.3.4 第三范式
BCNF要求:所有非平凡函数依赖都形如 α → β \alpha \rightarrow \beta α→β,其中一个 α \alpha α为超码。
3NF条件:
- α → β \alpha \rightarrow \beta α→β是一个平凡的函数依赖
- α \alpha α是R的一个超码
- β − α \beta - \alpha β−α 中的每个属性A都包含于R的一个候选码中
8.4 函数依赖
8.4.1 逻辑蕴涵的函数依赖
Armstrong公理