Klucze, normalizacja

0

Witam!

Mam pytanie odnośnie znajdowania kluczy, i normalizacji baz danych, mianowicie: Jak znaleŹć klucz, posiadając zależności? Przeszukałem mnóstwo stron na googlach i znalazłem same definicje, żadnych konkretów, więc postanowiłem napisać tutaj. No więc, jak znaleŹć klucze, mając zależności powiedzmy MN -> K, K->L, L->M? I dlaczego ten zbiór wartości jest kluczem, a nie inny? I jak określić w jakiej postaci normalizacji jest ta zależność(baza). Dziękuję z góry za wszelkie odpowiedzi, pozdrawiam!

0

Ż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}.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0