The definition of candidate keys can be illustrated with the following (abstract) example. Consider a relation variable (
relvar)
R with attributes (
A,
B,
C,
D) that has only the following two legal values
r1 and
r2: Here
r2 differs from
r1 only in the
A and
D values of the last tuple. For
r1 the following sets have the uniqueness property, i.e., there are no two distinct tuples in the instance with the same attribute values in the set: : {A,B}, {A,C}, {B,C}, {A,B,C}, {A,B,D}, {A,C,D}, {B,C,D}, {A,B,C,D} For
r2 the uniqueness property holds for the following sets; : {B,C}, {B,D}, {C,D}, {A,B,C}, {A,B,D}, {A,C,D}, {B,C,D}, {A,B,C,D} Since superkeys of a relvar are those sets of attributes that have the uniqueness property for
all legal values of that relvar and because we assume that
r1 and
r2 are all the legal values that
R can take, we can determine the set of superkeys of
R by taking the intersection of the two lists: : {B,C}, {A,B,C}, {A,B,D}, {A,C,D}, {B,C,D}, {A,B,C,D} Finally we need to select those sets for which there is no
proper subset in the list, which are in this case: : {B,C}, {A,B,D}, {A,C,D} These are indeed the candidate keys of relvar
R. We have to consider
all the relations that might be assigned to a relvar to determine whether a certain set of attributes is a candidate key. For example, if we had considered only
r1 then we would have concluded that {A,B} is a candidate key, which is incorrect. However, we
might be able to conclude from such a relation that a certain set is
not a candidate key, because that set does not have the uniqueness property (example {A,D} for
r1). Note that the existence of a proper subset of a set that has the uniqueness property
cannot in general be used as evidence that the superset is not a candidate key. In particular, note that in the case of an empty relation, every subset of the heading has the uniqueness property, including the empty set. ==Determining candidate keys==