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;
}
}
}
}
|