Trzecia normalna forma (3NF) to zasada bazy danych, która wspiera integralność danych, opierając się na zasadach normalizacji bazy danych dostarczonych przez pierwszą normalną formę (1NF) i drugą normalną formę (2NF).
Trzeci Normalny Wymagania Form
Istnieją dwa podstawowe wymagania, aby baza danych znajdowała się w trzeciej normalnej formie:
- Baza danych musi już spełniać wymagania zarówno 1NF, jak i 2NF.
- Wszystkie kolumny bazy danych muszą być zależne od klucza podstawowego, co oznacza, że wartość dowolnej kolumny może pochodzić tylko z klucza podstawowego.
O podstawowym kluczowym uzależnieniu
Przyjrzyjmy się dalej temu, co rozumiemy przez fakt, że wszystkie kolumny muszą zależeć od klucza podstawowego.
Jeśli wartość kolumny można uzyskać zarówno z klucza podstawowego, jak i innej kolumny w tabeli, narusza ona 3NF. Rozważ tabelę pracowników z tymi kolumnami:
- Numer identyfikacyjny pracownika
- Imię
- Nazwisko
Czy zarówno LastName, jak i FirstName zależą tylko od wartości EmployeeID? Cóż, czy nazwisko LastName może zależeć od imienia? Nie, ponieważ nic nieodłącznie związanego z LastName nie sugeruje wartości FirstName. Czy FirstName może zależeć od LastName? Nie, ponieważ to samo jest prawdą: bez względu na to, jakie jest Nazwisko, nie może podać wskazówki co do wartości FirstName. Dlatego ta tabela jest zgodna z 3NF.
Ale weź pod uwagę tabelę pojazdów:
- VehicleID
- Producent
- Model
Producent i model mogą pochodzić z VehicleID - ale model może również pochodzić od producenta, ponieważ model pojazdu jest wytwarzany tylko przez określonego producenta. Ten projekt tabeli nie jest zgodny z 3NF i dlatego może powodować anomalie danych. Na przykład możesz zaktualizować producenta bez aktualizacji modelu, wprowadzając niedokładności.
Aby było to zgodne, musielibyśmy przenieść dodatkową kolumnę zależną do innej tabeli i podać ją za pomocą klucza obcego. W wyniku tego powstałyby dwie tabele:
Tabela pojazdów
W poniższej tabeli ModelID jest obcym kluczem do Modele stół:
- VehicleID
- Producent
- ModelID
Tabela modeli
Ta nowa tabela mapuje modele do producentów. Jeśli chcesz zaktualizować informacje o pojeździe właściwe dla modelu, zrobiłbyś to w tej tabeli, a nie w tabeli Pojazdy.
- ModelID
- Producent
- Model
Pola pochodne w modelu 3NF
Tabela może zawierać pole pochodne - takie, które jest obliczane na podstawie innych kolumn w tabeli. Weźmy na przykład tę tabelę zamówień widżetów:
- Numer zamówienia
- Numer klienta
- Cena jednostkowa
- Ilość
- Całkowity
Łącznie łamie zgodność z 3NF, ponieważ można ją uzyskać, mnożąc cenę jednostkową przez ilość, a nie będąc w pełni zależną od klucza podstawowego. Musimy usunąć go ze stołu, aby zachować zgodność z trzecią normalną formą.
W rzeczywistości, ponieważ pochodzi, lepiej nie przechowywać go w bazie danych w ogóle.
Możemy po prostu obliczyć go "w locie" podczas wykonywania zapytań do bazy danych. Na przykład mogliśmy wcześniej użyć tej kwerendy, aby pobrać numery i sumy zamówień:
SELECT OrderNumber, Total FROM WidgetOrders
Możemy teraz użyć następującego zapytania:
SELECT OrderNumber, UnitPrice * Quantity AS Total From WidgetOrders
osiągnąć takie same wyniki bez naruszania zasad normalizacji.