Skip to main content

Jak przekonwertować bazę danych na trzecią normalną formę (3NF)

Spotkanie informacyjnego dot. III konkursu w ramach Działania 3.3. PO PC 2014-2020 (część 1). (Może 2024)

Spotkanie informacyjnego dot. III konkursu w ramach Działania 3.3. PO PC 2014-2020 (część 1). (Może 2024)
Anonim

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.