Żeby określić klucze kandydujące najlepiej najpierw znaleźć superklucze relacji (czyli taki zbiór atrybutów, którego podzbiorem jest klucz). Robi się to obliczając domknięcie zbioru atrybutów. Algorytm ten masz opisany w książce C.J. Date w rodziale o zależnościach funkcyjnych, podejrzewam, że na google też można znaleźć. Gdy już znajdziesz jakiś nadklucz to usuwasz, któryś atrybut i patrzysz czy przypadkiem nowy zbiór również nie jest nadkluczem. Gdy dojdziesz do momentu w którym usunięcie dowolnego elementu powoduje, że domknięcie zbioru przestaje być nadkluczem to znaczy, że znalazłeś klucz.
Można też w sposób bardziej intuicyjny powyszukiwać klucze korzystając z zależności funkcyjnych i odpowiednich tożsamości a później udowodnić, że jest to klucz korzystając z domknięć.
Przykład R(K,L,M,N):
MN -> K
K->L
L->M
Metoda intuicyjna:
K->L i L->M więc K -> LM
MN -> K i więc MN -> KLMN
Tak więc MN na pewno jest superkluczem relacji R
Gdyby usunąć M to domknięcie jest zbiorem pustym (bo samo M nie implikuje żadnego atrybutu)
To samo dotyczy N.
A więc {M,N} jest kluczem kandydującym relacji R.
W taki sam sposób można stwierdzić, że kluczem kandydującym jest również {K,N}.