input: X (a set of attributes) ℉ = set of functional dependencies output: result = X+ result := X; (due to X → X) DONE := FALSE; while ( not DONE ) { DONE := TRUE; for ( each FD "Y → Z" ∈ ℉ ) do { if ( Y ⊆ result ) { if ( Z ⊄ result ) { result := result ∪ Z; DONE := FALSE; } } } } |