potential key from the previous known key and the current FD */ S := α ∪ (K[i] − β); /* Search whether the new potential key is part of the already known keys */ found := false; for j := 0 to n-1 do if K[j] ⊆ S then found := true; /* If not, add if if not found then K[n] := minimize(S); n := n + 1; i := i + 1 return K The idea behind the algorithm is that given a candidate key and a functional dependency , the reverse application of the functional dependency yields the set , which is a key, too. It may however be covered by other already known candidate keys. (The algorithm checks this case using the 'found' variable.) If not, then minimizing the new key yields a new candidate key. The key insight is that all candidate keys can be created this way. See also Alternate key Compound key Database normalization Primary key Relational database Superkey Prime implicant is the corresponding notion of a candidate key in boolean logic References External links Relational Database Management Systems - Database Design - Terms of Reference - Keys: An overview of the different types of keys in the RDBMS (Relational Database Management System). Data modeling Relational model