カバー内の各 FD の左側は既に縮小されています。次のステップは、そのカバー内の FD の数を最小限に抑えることです。
一度に 1 つの FD を無視することによってこれを行い、無視された FD の LHS を開始点として使用して、カバー内の他の FD を使用して、依存する属性 (クロージャー) の同じセットを思い付くことができるかどうかを確認します。可能であれば、無視した FD は冗長であり、カバーから削除される可能性があります。残りの FD ごとにこれを行います。残っているのは最小限のカバーです。
最初に、開始カバーのすべての FD を使用して、無視する FD の LHS によって決定される一連の属性を導き出します。A
クロージャーは次のとおりです。
A, B, C, D, E, F, G, H, J
A -> D
閉鎖を削除して再計算してみてください...
initial closure: A
use A -> C closure: A, C
use A -> H closure: A, C, H
use A -> J closure: A, C, H, J
use J -> D closure: A, C, D, H, J
use J -> G closure: A, C, D, G, H, J
use H -> B closure: A, B, C, D, G, H, J
use CD -> E closure: A, B, C, D, E, G, H, J
use CD -> F closure: A, B, C, D, E, F, G, H, J
FD を参照せずに同じ属性セットを導出できるA -> D
ため、この FD は冗長であり、カバーから削除される可能性があります。実際には、派生した属性セットに現れたらプロセスを停止することもできD
ましたが、完全を期すためにプロセスを継続して、
A -> D
.
与えられた FD のセットの最小限のカバーは一意である必要はないことに注意してください。ただし、特定の最小カバーは、元のカバーと同じ依存関係のセットを具現化する必要があるため、最小カバーから依存関係を 1 つ削除しても同じクロージャーが生成されません。