Dzisiaj czytałem o algorytmie dekompozycji 3NF. Jest napisane:
- Znajdź minimalną podstawę F, powiedz G
- Dla każdego FD X → A w G, użyj {X, A} jako schematu jednej z relacji w dekompozycji
- Jeśli żaden z zestawów relacji z Kroku 2 nie jest superkluczem dla R, dodaj kolejną relację, której schemat jest kluczem dla R
Chcę rozłożyć tę relację na 3NF.
R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB}
Jak widać, klucz R to: {A},{B},{C}
S ma kilka minimalnych podstaw, takich jak:
-
{A→B, B→A, B→C, C→B}
; i -
{A→B, B→C, C→A}
Problem polega na tym, że jeśli użyjemy pierwszej minimalnej podstawy, rozłożymy R na 2 relacje : (A, B), (B, C).
Jeśli użyjemy drugiej podstawy minimalnej, R zamienia się w: (A, B), (B, C), (C, A).
Moje pytanie brzmi: która z nich jest poprawna?
Odpowiedź
Przede wszystkim zwróć uwagę, że Oryginalna relacja jest już w trzeciej postaci normalnej, ponieważ każdy atrybut jest liczbą pierwszą (właściwie każdy atrybut jest kluczem), więc definicja 3NF jest przestrzegana.
Następnie zauważ, że algorytm jest niekompletny. Kroki są następujące:
- Znajdź minimalną podstawę F, powiedz G
- Dla każdej grupy FD o tym samym lewa część, X → A 1 , X → A 2 , …, X → A n w G, użyj {X, A 1 , A 2 , …, A n } jako schemat jednej z relacji w dekompozycji
- Usuń wszystkie relacje, których atrybuty są zawarte w innej relacji.
- Jeśli żaden z zestawów relacji z Kroku 2 nie jest superkluczem dla R, dodaj kolejną relację, której schemat jest kluczem dla R.
W pierwszym przypadku otrzymujemy trzy grupy zależności:
A → B B → A B → C C → B
, które tworzą trzy relacje, R 1 (A, B), R 2 (A, B, C), R 3 (B, C) i zgodnie z algorytmem otrzymujesz wynik tylko R 2 , ponieważ pozostałe dwa mają zawarte w sobie atrybuty.
Więc masz dwa różne wyniki z algorytmu, w zależności od użytej minimalnej podstawy (która z kolei zależy od kolejność, w jakiej bierzesz pod uwagę zależności przy obliczaniu minimalnego pokrycia).
A więc odpowiedź na twoje pytanie:
które jeden jest poprawny?
to: oba są poprawne , ponieważ oba spełniają definicję 3NF. Po prostu odkryłeś, że algorytm syntezy do dekompozycji relacji w 3NF może dawać różne rozwiązania.
Inne pytanie brzmi: co jest „lepsze” i oczywiście rozwiązanie z jedną relacją jest „lepsze” , ponieważ nie musisz łączyć tabel podczas wykonywania zapytań.
Oczywiście, jeśli ktoś mógłby sprawdzić na początku, czy relacja jest już w 3NF, to może uniknąć zastosowania algorytmu. Ale generalnie nie można tego zrobić, ponieważ sprawdzenie wymaga wykładniczego obliczenia wszystkich kluczy w celu znalezienia głównych atrybutów relacji.
A First Course in Database System - 3rd edition
. Którą z nich mam teraz przestrzegać?