扩展: 可用下列规则进一步简化F+的手工计算 若α→β与α→γ成立,则α→By成立(合并 (→>B,a→B;a→y,aB→Bv;a→>By) 若α→βY成立,则a→B与a→y成立(分解) (→>By,By→B,0→>B) 若α→B与γB→8成立,则αy→8成立(伪传递 (→>B,Y→YB;YB→>8,ya→>6)
扩展: • 可用下列规则进一步简化F + 的手工计算. – 若 → 与 → 成立, 则 → 成立 (合并) ( → , → ; → , → ; → ) – 若 → 成立, 则 → 与 → 成立 (分解) ( → , → , → ) – 若 → 与 → 成立, 则 → 成立 (伪传递) ( → , → ; → , → )
属性集的闭包 给定属性集合α,定义α在F下的闭包(记做a)为被α 在F下函数决定的属性的集合: →>β is in f+ A阝∈Q 计算α+的算法 result =a while( result有变化)do for eachβ→> y in F do begin ifβ∈ result then result:= resultS end
属性集的闭包 • 给定属性集合 , 定义 在F 下的闭包 (记做+ ) 为被 在F 下函数决定的属性的集合: → is in F + + • 计算+ 的算法 result := ; while (result 有变化) do for each → in F do begin if result then result := result end
例 R=(A, B, C, G, H, D, F=因A→B,A→>CCG>H,CG→>1B→H 求:(AG 1. result= AG 2. result ABCG (A→> C and A→>B 3. result ABCGH(CG>H and CG C AGBC 4. result =ABCGH(CG>/and CGCAGBCH
▪ R = (A, B, C, G, H, I), F = {A → B,A → C,CG → H,CG → I,B → H} 求: (AG)+ 1. result = AG 2. result = ABCG (A → C and A → B) 3. result = ABCGH (CG → H and CG AGBC) 4. result = ABCGHI (CG → I and CG AGBCH) 例:
属性闭包的用法: 属性闭包算法有多种用途 测试超键: 为检测α是否超键,可计算α+并检查o+是否包含R的 所有属性 测试函数依赖 为检测函数依赖α→>β是否成立(即属于F),只需检 查是否βca 即,可计算α+,并检查它是否包含β 这个检查简单而高效,非常有用 计算F的闭包 对每个γ≤R计算γ,再对每个Scγ,输出函数依赖 y→)S
属性闭包的用法: 属性闭包算法有多种用途: • 测试超键: – 为检测 是否超键, 可计算+ 并检查+ 是否包含R的 所有属性 • 测试函数依赖 – 为检测函数依赖 → 是否成立(即属于F + ), 只需检 查是否 + . – 即, 可计算+ , 并检查它是否包含. – 这个检查简单而高效, 非常有用 • 计算F的闭包 – 对每个 R, 计算 + , 再对每个S + , 输出函数依赖 → S
两个函数依赖集等价: 函数依赖集F,G,若F+=G+,则称F与G等价。 F+=G+<→FCG+,GcF+
两个函数依赖集等价: 函数依赖集F,G,若F+= G+,则称F与G等价。 F+ = G+FG+,GF+