Normalizacja bazy danych - Database normalization

Normalizacja bazy danych to proces strukturyzacji bazy danych , zwykle relacyjnej bazy danych , zgodnie z szeregiem tzw. normalnych form w celu zmniejszenia nadmiarowości danych i poprawy integralności danych . Po raz pierwszy został zaproponowany przez Edgara F. Codda jako część jego modelu relacyjnego .

Normalizacja polega na zorganizowaniu kolumn (atrybutów) i tabel (relacji) bazy danych, aby zapewnić, że ich zależności są odpowiednio wymuszane przez ograniczenia integralności bazy danych. Jest to osiągane przez zastosowanie pewnych reguł formalnych w procesie syntezy (tworzenie nowego projektu bazy danych) lub dekompozycji (ulepszenie istniejącego projektu bazy danych).

Cele

Podstawowym celem pierwszej postaci normalnej zdefiniowanej przez Codda w 1970 roku było umożliwienie odpytywania danych i manipulowania nimi przy użyciu „uniwersalnego podjęzyka danych” opartego na logice pierwszego rzędu . ( SQL jest przykładem takiego podjęzyka danych, aczkolwiek takiego, który Codd uznał za poważnie wadliwy.)

Cele normalizacji poza 1NF (pierwsza postać normalna) zostały określone przez Codda:

  1. Aby uwolnić kolekcję relacji od niepożądanych zależności wstawiania, aktualizacji i usuwania.
  2. Aby zmniejszyć potrzebę restrukturyzacji kolekcji relacji, w miarę wprowadzania nowych typów danych, a tym samym zwiększyć żywotność programów użytkowych.
  3. Aby model relacyjny był bardziej informacyjny dla użytkowników.
  4. Aby zbieranie relacji było neutralne dla statystyk zapytań, które mogą się zmieniać w miarę upływu czasu.
—  EF Codd, „Dalsza normalizacja relacyjnego modelu bazy danych”
Anomalia aktualizacji . Pracownik 519 jest pokazany jako mający różne adresy w różnych rekordach.
Wstawiania anomalii . Dopóki nowy członek wydziału, dr Newsome, nie zostanie przydzielony do prowadzenia co najmniej jednego kursu, jego szczegóły nie mogą być rejestrowane.
Usunięcie nieprawidłowości . Wszystkie informacje o dr Giddensie zostaną utracone, jeśli tymczasowo przestaną być przypisywane do jakichkolwiek kursów.

Podczas próby zmodyfikowania (aktualizacji, wstawienia lub usunięcia) relacji, w relacjach, które nie zostały wystarczająco znormalizowane, mogą pojawić się następujące niepożądane efekty uboczne:

  • Zaktualizuj anomalię. Te same informacje mogą być wyrażone w wielu wierszach; dlatego aktualizacje relacji mogą powodować logiczne niespójności. Na przykład każdy rekord w relacji „Umiejętności pracowników” może zawierać identyfikator pracownika, adres pracownika i umiejętność; w związku z tym zmiana adresu konkretnego pracownika może wymagać zastosowania do wielu rekordów (po jednym dla każdej umiejętności). Jeżeli aktualizacja zakończy się sukcesem tylko częściowo – adres pracownika jest aktualizowany na niektórych rekordach, ale nie na innych – to relacja pozostaje w stanie niespójnym. W szczególności relacja dostarcza sprzecznych odpowiedzi na pytanie, jaki jest adres tego konkretnego pracownika. Zjawisko to jest znane jako anomalia aktualizacji.
  • Anomalia wstawiania. Istnieją okoliczności, w których pewnych faktów w ogóle nie można zarejestrować. Na przykład każdy rekord w relacji „Wydział i ich kursy” może zawierać identyfikator wydziału, nazwę wydziału, datę zatrudnienia wydziału i kod kursu. W związku z tym można rejestrować dane każdego członka wydziału, który prowadzi co najmniej jeden kurs, ale nowo zatrudniony członek wydziału, który nie został jeszcze przydzielony do nauczania żadnych kursów, nie może być rejestrowany, z wyjątkiem ustawienia Kodu kursu na null . Zjawisko to jest znane jako anomalia wstawiania.
  • Anomalia usunięcia. W pewnych okolicznościach usunięcie danych reprezentujących pewne fakty wiąże się z koniecznością usunięcia danych reprezentujących zupełnie inne fakty. Relacja „Wydział i ich kursy” opisana w poprzednim przykładzie cierpi z powodu tego typu anomalii, ponieważ jeśli członek wydziału tymczasowo przestaje być przypisywany do jakichkolwiek kursów, ostatni z rekordów, na których ten członek wydziału się pojawia, musi zostać skutecznie usunięty. także usunięcie członka wydziału, chyba że pole Kod kursu jest ustawione na null. Zjawisko to jest znane jako anomalia delecji.

Zminimalizuj przeprojektowanie przy rozszerzaniu struktury bazy danych

W pełni znormalizowana baza danych umożliwia rozszerzenie jej struktury w celu dostosowania do nowych typów danych bez zbytniego zmieniania istniejącej struktury. W rezultacie wpływ na aplikacje współpracujące z bazą danych jest minimalny.

Relacje znormalizowane i relacje między jedną znormalizowaną relacją a drugą odzwierciedlają koncepcje świata rzeczywistego i ich wzajemne powiązania.

Formy normalne

Codd wprowadził pojęcie normalizacji i to, co jest obecnie znane jako pierwsza forma normalna (1NF) w 1970 roku. Codd zdefiniował drugą formę normalną (2NF) i trzecią formę normalną (3NF) w 1971 roku, a Codd i Raymond F. Boyce zdefiniował postać normalną Boyce-Codda (BCNF) w 1974 roku.

Nieformalnie relacja relacyjnej bazy danych jest często opisywana jako „znormalizowana”, jeśli spełnia trzecią formę normalną. Większość relacji 3NF jest wolna od anomalii wstawiania, aktualizowania i usuwania.

Formy normalne (od najmniej znormalizowanej do najbardziej znormalizowanej) to:

UNF
(1970)
1PN
(1970)
2PN
(1971)
3PN
(1971)
EKNF
(1982)
BCNF
(1974)
4NF
(1977)
ETNF
(2012)
5NF
(1979)
DKNF
(1981)
6NF
(2003)
Klucz podstawowy (bez duplikatów krotek ) Być może tak tak tak tak tak tak tak tak tak tak
Kolumny atomowe (komórki nie mogą mieć tabel jako wartości) Nie tak tak tak tak tak tak tak tak tak tak
Każda nietrywialna zależność funkcjonalna albo nie zaczyna się odpowiednim podzbiorem klucza kandydującego, albo kończy się atrybutem podstawowym (brak częściowych zależności funkcjonalnych atrybutów innych niż podstawowe od kluczy kandydujących) Nie Nie tak tak tak tak tak tak tak tak tak
Każda nietrywialna zależność funkcjonalna albo zaczyna się od superklucza, albo kończy się atrybutem podstawowym (brak przechodnich zależności funkcjonalnych atrybutów innych niż podstawowe od kluczy kandydujących) Nie Nie Nie tak tak tak tak tak tak tak tak
Każda nietrywialna zależność funkcjonalna albo zaczyna się od superklucza, albo kończy na elementarnym atrybucie pierwszym Nie Nie Nie Nie tak tak tak tak tak tak Nie dotyczy
Każda nietrywialna zależność funkcjonalna zaczyna się od superklucza Nie Nie Nie Nie Nie tak tak tak tak tak Nie dotyczy
Każda nietrywialna zależność wielowartościowa zaczyna się od superklucza Nie Nie Nie Nie Nie Nie tak tak tak tak Nie dotyczy
Każda zależność łączenia ma komponent superklucza Nie Nie Nie Nie Nie Nie Nie tak tak tak Nie dotyczy
Każda zależność łączenia ma tylko komponenty superklucza Nie Nie Nie Nie Nie Nie Nie Nie tak tak Nie dotyczy
Każde ograniczenie jest konsekwencją ograniczeń domeny i kluczowych ograniczeń Nie Nie Nie Nie Nie Nie Nie Nie Nie tak Nie
Każda zależność przyłączenia jest trywialna Nie Nie Nie Nie Nie Nie Nie Nie Nie Nie tak

Przykład normalizacji krok po kroku

Normalizacja to technika projektowania bazy danych, która służy do projektowania tabeli relacyjnej bazy danych do wyższej postaci normalnej. Proces jest progresywny i nie można osiągnąć wyższego poziomu normalizacji bazy danych, jeśli nie zostały spełnione poprzednie poziomy.

Oznacza to, że mając dane w postaci nieznormalizowanej (najmniej znormalizowanej) i dążąc do osiągnięcia najwyższego poziomu normalizacji, pierwszym krokiem byłoby zapewnienie zgodności z pierwszą postacią normalną , drugim krokiem byłoby zapewnienie spełnienia drugiej postaci normalnej , i tak dalej w kolejności wymienionej powyżej, aż dane będą zgodne z szóstą postacią normalną .

Warto jednak zauważyć, że formy normalne poza 4NF są głównie przedmiotem zainteresowania akademickiego, ponieważ problemy, które mają do rozwiązania, rzadko pojawiają się w praktyce.

Należy pamiętać, że dane w poniższym przykładzie zostały celowo zaprojektowane tak, aby były sprzeczne z większością normalnych formularzy. W prawdziwym życiu całkiem możliwe jest pominięcie niektórych kroków normalizacji, ponieważ tabela nie zawiera niczego, co byłoby sprzeczne z daną formą normalną. Często zdarza się również, że naprawienie naruszenia jednej formy normalnej naprawia również naruszenie wyższej formy normalnej w procesie. Również jedna tabela została wybrana do normalizacji na każdym kroku, co oznacza, że ​​na końcu tego przykładowego procesu mogą nadal istnieć tabele nie spełniające najwyższej normalnej postaci.

Wstępne dane

Niech istnieje tabela bazy danych o następującej strukturze:

Tytuł Autor Narodowość autora Format Cena Podmiot Strony Grubość Wydawca Kraj wydawcy Typ publikacji Identyfikator gatunku Nazwa gatunku
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Czad Russell amerykański Twarda okładka 49,99
MySQL
Baza danych
Projekt
520 Gruby Apress USA E-book 1 Instruktaż

W tym przykładzie zakłada się, że każda książka ma tylko jednego autora.

Warunkiem zgodności z modelem relacyjnym jest to, że tabela musi mieć klucz podstawowy , który jednoznacznie identyfikuje wiersz. Dwie książki mogą mieć ten sam tytuł, ale numer ISBN jednoznacznie identyfikuje książkę, więc może być używany jako klucz podstawowy:

Numer ISBN Tytuł Autor Narodowość autora Format Cena Podmiot Strony Grubość Wydawca Kraj wydawcy Typ publikacji Identyfikator gatunku Nazwa gatunku
1590593324 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Czad Russell amerykański Twarda okładka 49,99
MySQL
Baza danych
Projekt
520 Gruby Apress USA E-book 1 Instruktaż

Zadowalająca 1NF

Aby spełnić First normal form , każda kolumna tabeli musi mieć jedną wartość. Kolumny zawierające zestawy wartości lub rekordy zagnieżdżone są niedozwolone.

W początkowej tabeli Temat zawiera zestaw wartości podmiotu, co oznacza, że ​​nie jest zgodny.

Aby rozwiązać problem, tematy są wyodrębniane do osobnej tabeli Temat :

Książka
Numer ISBN Tytuł Format Autor Narodowość autora Cena Strony Grubość Wydawca Kraj wydawcy Identyfikator gatunku Nazwa gatunku
1590593324 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Twarda okładka Czad Russell amerykański 49,99 520 Gruby Apress USA 1 Instruktaż
Podmiot
Numer ISBN Nazwa przedmiotu
1590593324 MySQL
1590593324 Baza danych
1590593324 Projekt

Do tabeli Temat dodawana jest kolumna klucza obcego , która odnosi się do klucza podstawowego wiersza, z którego wyodrębniono temat. W związku z tym reprezentowane są te same informacje, ale bez użycia nieprostych domen.

Zamiast jednej tabeli w nieznormalizowanej formie są teraz dwie tabele zgodne z 1NF.

Zadowalająca 2NF

Book tabela ma jeden klucz potencjalny (który jest zatem klucz podstawowy ), ten klucz kompozytowego {Title, Format} . Rozważ następujący fragment tabeli:

Książka
Tytuł Format Autor Narodowość autora Cena Strony Grubość Identyfikator gatunku Nazwa gatunku Identyfikator wydawcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Twarda okładka Czad Russell amerykański 49,99 520 Gruby 1 Instruktaż 1
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL E-book Czad Russell amerykański 22.34 520 Gruby 1 Instruktaż 1
Model relacyjny zarządzania bazą danych: wersja 2 E-book EFCod brytyjski 13.88 538 Gruby 2 Popularna nauka 2
Model relacyjny zarządzania bazą danych: wersja 2 Książka w broszurowej oprawie EFCod brytyjski 39,99 538 Gruby 2 Popularna nauka 2

Wszystkie atrybuty, które nie są częścią klucza kandydującego, zależą od tytułu , ale tylko cena zależy również od formatu . Aby zapewnić zgodność z 2NF i usunąć duplikaty, każdy atrybut klucza niebędącego kandydatem musi zależeć od całego klucza kandydującego, a nie tylko jego części.

Aby znormalizować tę tabelę, ustaw {Title} jako (prosty) klucz kandydujący (klucz podstawowy), tak aby każdy atrybut klucza niebędącego kandydatem zależał od całego klucza kandydującego, i usuń cenę do osobnej tabeli, aby jego zależność od formatu mogła być zachowane:

Książka
Tytuł Autor Narodowość autora Strony Grubość Identyfikator gatunku Nazwa gatunku Identyfikator wydawcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Czad Russell amerykański 520 Gruby 1 Instruktaż 1
Model relacyjny zarządzania bazą danych: wersja 2 EFCod brytyjski 538 Gruby 2 Popularna nauka 2
Format - Cena
Tytuł Format Cena
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Twarda okładka 49,99
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL E-book 22.34
Model relacyjny zarządzania bazą danych: wersja 2 E-book 13.88
Model relacyjny zarządzania bazą danych: wersja 2 Książka w broszurowej oprawie 39,99

Teraz tabela Książka jest zgodna z 2NF .

Zadowalająca 3NF

Zarezerwuj stolik nadal ma przechodnia zależność funkcjonalna ({Autor Narodowość} zależy od {} Autor, który jest zależny od {title}). Podobne naruszenie występuje w przypadku gatunku ({Nazwa gatunku} jest zależny od {Identyfikatora gatunku}, który jest zależny od {Tytułu}). Stąd tabela Księga nie znajduje się w 3NF. Aby zrobić to w 3NF, użyjmy następującej struktury tabeli, eliminując w ten sposób przechodnie zależności funkcjonalne, umieszczając {Narodowość autora} i {Nazwa gatunku} w ich własnych odpowiednich tabelach:

Książka
Tytuł Autor Strony Grubość Identyfikator gatunku Identyfikator wydawcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Czad Russell 520 Gruby 1 1
Model relacyjny zarządzania bazą danych: wersja 2 EFCod 538 Gruby 2 2
Format - Cena
Tytuł Format Cena
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Twarda okładka 49,99
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL E-book 22.34
Model relacyjny zarządzania bazą danych: wersja 2 E-book 13.88
Model relacyjny zarządzania bazą danych: wersja 2 Książka w broszurowej oprawie 39,99
Autor
Autor Narodowość autora
Czad Russell amerykański
EFCod brytyjski
Gatunek muzyczny
Identyfikator gatunku Nazwa gatunku
1 Instruktaż
2 Popularna nauka

Zadowalający EKNF

Podstawowa kluczowa postać normalna (EKNF) mieści się ściśle pomiędzy 3NF a BCNF i nie jest zbytnio omawiana w literaturze. Ma on na celu „uchwycenie istotnych cech zarówno 3NF, jak i BCNF”, przy jednoczesnym uniknięciu problemów obu (mianowicie, że 3NF jest „zbyt wyrozumiały”, a BCNF jest „podatny na złożoność obliczeniową”). Ponieważ jest rzadko wspominany w literaturze, nie został uwzględniony w tym przykładzie.

Zadowalająca 4NF

Załóżmy, że baza danych należy do franczyzy księgarni, która ma kilku franczyzobiorców posiadających sklepy w różnych lokalizacjach. Dlatego sprzedawca zdecydował się dodać tabelę zawierającą dane o dostępności książek w różnych lokalizacjach:

Franczyzobiorca — lokalizacja rezerwacji
Identyfikator franczyzobiorcy Tytuł Lokalizacja
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Kalifornia
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Floryda
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Teksas
1 Model relacyjny zarządzania bazą danych: wersja 2 Kalifornia
1 Model relacyjny zarządzania bazą danych: wersja 2 Floryda
1 Model relacyjny zarządzania bazą danych: wersja 2 Teksas
2 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Kalifornia
2 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Floryda
2 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Teksas
2 Model relacyjny zarządzania bazą danych: wersja 2 Kalifornia
2 Model relacyjny zarządzania bazą danych: wersja 2 Floryda
2 Model relacyjny zarządzania bazą danych: wersja 2 Teksas
3 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Teksas

Ponieważ ta struktura tabeli składa się ze złożonego klucza podstawowego , nie zawiera żadnych atrybutów niekluczowych i znajduje się już w BCNF (a zatem spełnia również wszystkie poprzednie formy normalne ). Jednak zakładając, że wszystkie dostępne książki są dostępne w każdej dziedzinie, tytuł nie jest jednoznacznie związana z pewnym Położenie i dlatego tabela nie spełniają 4nF .

Oznacza to, że aby spełnić czwartą postać normalną , ta tabela również musi zostać rozłożona:

Franczyzobiorca - Rezerwuj
Identyfikator franczyzobiorcy Tytuł
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
1 Model relacyjny zarządzania bazą danych: wersja 2
2 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
2 Model relacyjny zarządzania bazą danych: wersja 2
3 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
Franczyzobiorca — lokalizacja
Identyfikator franczyzobiorcy Lokalizacja
1 Kalifornia
1 Floryda
1 Teksas
2 Kalifornia
2 Floryda
2 Teksas
3 Teksas

Teraz każdy rekord jest jednoznacznie identyfikowany przez nadkluczem więc 4NF jest spełniony.

Zadowalający ETNF

Załóżmy, że franczyzobiorcy mogą również zamawiać książki od różnych dostawców. Niech relacja podlega również następującemu ograniczeniu:

  • Jeśli określony dostawca dostarcza określony tytuł
  • a tytuł jest dostarczany franczyzobiorcy
  • a franczyzobiorca jest zaopatrywany przez dostawcę,
  • wówczas dostawca zaopatruje tytuł do franczyzobiorcy .
Dostawca - Książka - Franczyzobiorca
identyfikator dostawcy Tytuł Identyfikator franczyzobiorcy
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL 1
2 Model relacyjny zarządzania bazą danych: wersja 2 2
3 Nauka SQL 3

Ta tabela jest w 4NF , ale identyfikator dostawcy jest równy sprzężeniu jej projekcji: {{ID dostawcy, książka}, {książka, identyfikator franczyzobiorcy}, {identyfikator franczyzobiorcy, identyfikator dostawcy}}. Żaden składnik tej zależności łączenia nie jest superkluczem (jedynym superkluczem jest cały nagłówek), więc tabela nie spełnia wymagań ETNF i może być dalej rozłożona:

Dostawca - Książka
identyfikator dostawcy Tytuł
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
2 Model relacyjny zarządzania bazą danych: wersja 2
3 Nauka SQL
Książka - Franczyzobiorca
Tytuł Identyfikator franczyzobiorcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL 1
Model relacyjny zarządzania bazą danych: wersja 2 2
Nauka SQL 3
Franczyzobiorca - Dostawca
identyfikator dostawcy Identyfikator franczyzobiorcy
1 1
2 2
3 3

Rozkład zapewnia zgodność z ETNF.

Zadowalająca 5NF

Aby wykryć tabelę, która nie spełnia 5NF , zwykle konieczne jest dokładne zbadanie danych. Załóżmy tabelę z przykładu 4NF z niewielką modyfikacją danych i sprawdźmy, czy spełnia ona wymagania 5NF :

Franczyzobiorca — lokalizacja rezerwacji
Identyfikator franczyzobiorcy Tytuł Lokalizacja
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Kalifornia
1 Nauka SQL Kalifornia
1 Model relacyjny zarządzania bazą danych: wersja 2 Teksas
2 Model relacyjny zarządzania bazą danych: wersja 2 Kalifornia

Rozkładanie tej tabeli zmniejsza nadmiarowość, czego wynikiem są następujące dwie tabele:

Franczyzobiorca - Rezerwuj
Identyfikator franczyzobiorcy Tytuł
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
1 Nauka SQL
1 Model relacyjny zarządzania bazą danych: wersja 2
2 Model relacyjny zarządzania bazą danych: wersja 2
Franczyzobiorca — lokalizacja
Identyfikator franczyzobiorcy Lokalizacja
1 Kalifornia
1 Teksas
2 Kalifornia

Zapytanie łączące te tabele zwróciłoby następujące dane:

Franczyzobiorca - Rezerwuj - Lokalizacja JOINed
Identyfikator franczyzobiorcy Tytuł Lokalizacja
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Kalifornia
1 Nauka SQL Kalifornia
1 Model relacyjny zarządzania bazą danych: wersja 2 Kalifornia
1 Model relacyjny zarządzania bazą danych: wersja 2 Teksas
1 Nauka SQL Teksas
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL Teksas
2 Model relacyjny zarządzania bazą danych: wersja 2 Kalifornia

JOIN zwraca trzy wiersze więcej niż powinno; dodanie kolejnej tabeli w celu wyjaśnienia relacji powoduje powstanie trzech oddzielnych tabel:

Franczyzobiorca - Rezerwuj
Identyfikator franczyzobiorcy Tytuł
1 Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
1 Nauka SQL
1 Model relacyjny zarządzania bazą danych: wersja 2
2 Model relacyjny zarządzania bazą danych: wersja 2
Franczyzobiorca — lokalizacja
Identyfikator franczyzobiorcy Lokalizacja
1 Kalifornia
1 Teksas
2 Kalifornia
Lokalizacja - Rezerwuj
Lokalizacja Tytuł
Kalifornia Rozpoczęcie projektowania i optymalizacji bazy danych MySQL
Kalifornia Nauka SQL
Kalifornia Model relacyjny zarządzania bazą danych: wersja 2
Teksas Model relacyjny zarządzania bazą danych: wersja 2

Co teraz zwróci JOIN? Właściwie nie można dołączyć do tych trzech stołów. Oznacza to, że nie można było rozłożyć lokalizacji książki franczyzobiorcy bez utraty danych, dlatego tabela już spełnia wymagania 5NF .

CJ Date twierdzi, że tylko baza danych w 5NF jest naprawdę „znormalizowana”.

Zadowalający DKNF

Przyjrzyjmy się tabeli Książka z poprzednich przykładów i zobaczmy, czy jest ona zgodna z normalną formą klucza domeny :

Książka
Tytuł Strony Grubość Identyfikator gatunku Identyfikator wydawcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL 520 Gruby 1 1
Model relacyjny zarządzania bazą danych: wersja 2 538 Gruby 2 2
Nauka SQL 338 Szczupły 1 3
Książka kucharska SQL 636 Gruby 1 3

Logicznie rzecz biorąc, grubość zależy od liczby stron. Oznacza to, że zależy to od stron, które nie są kluczem. Ustawmy przykładową konwencję mówiącą, że książka do 350 stron jest uważana za „wąską”, a książkę powyżej 350 stron uważa się za „grubą”.

Ta konwencja jest technicznie ograniczeniem, ale nie jest ani ograniczeniem domeny, ani ograniczeniem kluczowym; dlatego nie możemy polegać na ograniczeniach domeny i kluczowych ograniczeniach, aby zachować integralność danych.

Innymi słowy — nic nie stoi na przeszkodzie, aby wstawić np. „Gruby” dla książki mającej tylko 50 stron — a to sprawia, że ​​tabela narusza DKNF .

Aby rozwiązać ten problem, tworzona jest tabela zawierająca wyliczenie, które definiuje Grubość , a ta kolumna jest usuwana z oryginalnej tabeli:

Wyliczenie grubości
Grubość Min. strony Maks. stron
Szczupły 1 350
Gruby 351 999,999,999,999
Książka - Strony - Gatunek - Wydawca
Tytuł Strony Identyfikator gatunku Identyfikator wydawcy
Rozpoczęcie projektowania i optymalizacji bazy danych MySQL 520 1 1
Model relacyjny zarządzania bazą danych: wersja 2 538 2 2
Nauka SQL 338 1 3
Książka kucharska SQL 636 1 3

W ten sposób naruszenie integralności domeny zostało wyeliminowane, a tabela znajduje się w DKNF .

Zadowalająca 6NF

Prostą i intuicyjną definicją szóstej postaci normalnej jest to, że „tabela jest w 6NF, gdy wiersz zawiera klucz główny i co najwyżej jeden inny atrybut” .

Oznacza to na przykład tabelę Publishera zaprojektowaną podczas tworzenia 1NF

Wydawca
Identyfikator_wydawcy Nazwa Kraj
1 Apress USA

należy dodatkowo rozłożyć na dwie tabele:

Wydawca
Identyfikator_wydawcy Nazwa
1 Apress
Kraj wydawcy
Identyfikator_wydawcy Kraj
1 USA

Oczywistą wadą 6NF jest mnogość tabel wymaganych do reprezentowania informacji o jednym podmiocie. Jeśli tabela w 5NF ma jedną kolumnę klucza podstawowego i N atrybutów, reprezentowanie tych samych informacji w 6NF będzie wymagało N tabel; aktualizacje wielopolowe do jednego rekordu koncepcyjnego będą wymagały aktualizacji wielu tabel; a operacje wstawiania i usuwania będą podobnie wymagały operacji w wielu tabelach. Z tego powodu w bazach danych przeznaczonych do obsługi potrzeb przetwarzania transakcji online nie należy stosować 6NF.

Jednak w hurtowniach danych , które nie pozwalają na interaktywne aktualizacje i które są wyspecjalizowane do szybkich zapytań dotyczących dużych ilości danych, niektóre DBMS używają wewnętrznej reprezentacji 6NF — znanej jako kolumnowy magazyn danych . W sytuacjach, gdy liczba unikalnych wartości w kolumnie jest znacznie mniejsza niż liczba wierszy w tabeli, przechowywanie zorientowane na kolumny pozwala na znaczne oszczędności miejsca dzięki kompresji danych. Przechowywanie kolumnowe umożliwia również szybkie wykonywanie zapytań o zakres (np. pokaż wszystkie rekordy, w których dana kolumna znajduje się między X a Y lub mniej niż X).

Jednak we wszystkich tych przypadkach projektant bazy danych nie musi ręcznie wykonywać normalizacji 6NF, tworząc oddzielne tabele. Niektóre systemy DBMS, które specjalizują się w magazynowaniu, takie jak Sybase IQ , domyślnie używają pamięci kolumnowej, ale projektant nadal widzi tylko jedną tabelę wielokolumnową. Inne DBMS, takie jak Microsoft SQL Server 2012 i nowsze, pozwalają określić „indeks magazynu kolumn” dla określonej tabeli.

Zobacz też

Uwagi i referencje

Dalsza lektura

Zewnętrzne linki