可以看出每个系的dept_name,building,budget数据都要重复一次,这样做浪费空间,并且可能导致数据不一致,更新也较复杂,例如修改dept_name,很多相关元组都要进行修改。 模式分解
可以将关系模式(A,B,C,D)分解为:(A,B)和(B,C,D),或(A,C,D)和 (A,B,D),或(A,B,C)和(C,D),或(A,B)、(B,C)和(C,D),或 (A,D)和 (B,C,D) 。
例,将关系模式inst_dept分解为:
― instructor(ID,name,dept_name,salary)
― department(dept_name,building,budget)
原模式(R )的所有属性都必须出现在分解后的(R1, R2)中: R = R 1 ∪ R 2 R = R_1 \cup R_2 R=R1∪R2
如果 R 1 R_1 R1和$ R_2 全 外 连 接 等 于 全外连接等于 全外连接等于R$,则是一个无损连接分解。
例:
函数依赖
例:
Armstrong公理
Armstrong公理是用来找到闭包的一个理论,先介绍一下什么是函数依赖集的闭包:给定函数依赖集F,存在其他函数依赖被 F ′ F^{\prime} F′逻辑蕴含(例:如果A→B且B→C,则可推出逻辑蕴涵A→C),被 F ′ F^{\prime} F′逻辑蕴含的全体函数依赖的集合称为F的闭包,用 F + F^+ F+表示F的闭包。
我们可以利用Armstrong公理找出 F + F^+ F+: