Boyce-Codd, czwarte i piąte normalne formy

Boyce-Codd, czwarte i piąte normalne formy

„To część czwartej serii, pięć normalnych form. Normalna postać z kodkiem Boyce jest skrócona BCNF. Jest również znany jako 3.5nf. 3.5 to 3½. Pochodzi po trzeciej normalnej formie. Czwarta normalna postać jest skrócona 4NF i następuje po normalnej formie Boyce Codd. Piąta normalna postać jest skrócona 5NF i następuje po czwartej postaci normalnej.

Ten samouczek (artykuł) jest czwartą częścią serii samouczka, pięć normalnych form. Ten samouczek wyjaśnia BCNF, 4NF i 5NF.

Ten samouczek następuje w następujący sposób: ojciec umarł. Zostawił trochę pieniędzy dla swojego syna. Jego syn postanowił wykorzystać pieniądze na otwarcie (rozpoczęcie) sklepu wygodnego. Sklep wygody jest już zaopatrzony i działa od pewnego czasu. Syn ma niektórych pracowników o nazwie Clerks, w tej serii samouczków. Syn jest właścicielem. Zanim sklep zaczął działać, zarówno właściciel, jak i urzędnicy nie znali normalnych form.

Ty, czytelnik, ukończyłeś tę pięć normalnych serii samouczków formularzy, a także jesteś deweloperem bazy danych. Syn zmarłego ojca jest twoim przyjacielem. Odwiedziłeś jego sklep w ciągu ostatnich trzech dni. Pierwszego dnia ich odwiedziłeś; Wyszkoliłeś właściciela i jego pracowników, jak umieścić tabelę bazy danych w 1NF. Drugiego dnia wyszkoliłeś ich, jak przenieść stół z 1NF do 2NF. Trzeciego dnia wyszkoliłeś ich, jak przenieść stół z 2NF do 3NF.

Dzisiaj, czwarty dzień, odwiedziłeś sklep, aby wyszkolić tylko właściciela w BCNF, 4NF i 5NF w jego biurze."

Normalna postać kodowana przez chłopięce

Problem BCNF występuje, gdy istnieje złożony klawisz podstawowy i atrybut klawisza nieprogowego (kolumna), a klucz nieprogowy funkcjonalnie zależy od części (e.G., jeden) atrybutów klucza podstawowego, podczas gdy tabela jest już w trzeciej formie normalnej.

Oznacza to, że kolumna non-prime (klawisz nieprogowy) i kolumna pierwsza zależą od formularza encji i muszą zostać usunięte jako oddzielna tabela, w której kolumna nieprime będzie kluczowym kluczem podstawowym. Druga część złożonego klucza podstawowego utworzy nową tabelę z kolumną nieprime, a kolumna nieprime niekoniecznie będzie częścią klucza podstawowego. Druga część złożonego klucza podstawowego pozostaje klucz podstawowy. Powiązane możliwe zależności z tabeli rodziców odpowiednio towarzyszą dwóm dzieciom.

Oddzielenie tabel dla normalnej formy kodowanej przez Boyce nie jest tak samo jak oddzielenie tabel w 2NF i 3NF.

Tabela znajduje się w normalnej formie, jeśli przestrzegane są następujące zasady:

  1. Tabela powinna już znajdować się w trzeciej normalnej formie.
  2. Żaden atrybut nieprime (kolumna) nie powinien zależeć od części złożonego klucza podstawowego.

Ten drugi punkt, jak cytowano, jest uproszczony.

Przykład

W poprzedniej części tej serii tabela Saledetails (z pewną modyfikacją) podano w następujący sposób:

SaleDetails (SaleId, produkt, liczby, jednostki, jednostki, zniżka)


Odpowiednia tabela z danymi to:

Cena sprzedaży jednostkowej jest typu, pływaku lub liczby. Kluczem podstawowym w tej tabeli jest klucz złożony składający się z SaleID i produktu.

Ta tabela jest w 3NF. Liczbę sprzedanych produktów można uznać za zależne od produktu, a nie od SaleID. Innymi słowy, klucz nieprime może zależeć tylko od części złożonego klucza podstawowego. To nie powinno się zdarzyć; I tak z tych trzech kolumn mogą wynikać z następujących dwóch tabel:

Ilość (liczby, produkt)


I

Saledetails (SaleId, Numberold)


W tabeli ilość klucz podstawowy jest liczbowy. W przypadku nowej tabeli Saledetails klucz podstawowy jest nadal sprzedawany.

Z tabeli macierzystej Saledetails jedynym zależnym od liczb jest produkt. Z tabeli rodzicielskiej Saledetails, zależni od SaleID są liczbowalni, jednostki, zniżki i bez produktu. I tak faktycznie powinny być:

Ilość (liczby, produkt)


I

SaleDetails (SaleId, Numberold, Numberold, jednostki Specie, rabat)


W tym momencie właściciel dokonuje następującego komentarza:

„Nie sądzę, że kiedykolwiek będę chciałbym poznać ilość określonego produktu sprzedanego bez chęci poznania SaleID, co zależy od trio (kupowanie klienta, sprzedaż pracownika i daty transakcji).„Ty, programista bazy danych, odpowiada w następujący sposób:

„W takim przypadku pozwólmy SaleDetails i Tabela Orderdetails w 3NF. W końcu wiele komercyjnych baz danych nie wykracza poza 3NF, a firmy są wygodne. Jednak ilekroć chcesz to wiedzieć w przypadku podobnej tabeli, rozbij tabelę nadrzędną na tabele BCNF."

Czwarta normalna forma

1NF, 2NF, 3NF i BCNF polegają na zależności funkcjonalnej. 4NF opiera się na specjalnym rodzaju zależności funkcjonalnej, która jest raczej „niepokojąca”, szczególnie jeśli nie dobrze zrozumiana. Ta raczej niepokojąca zależność nazywa się zależnością wielowarstwową.

Zależność funkcjonalna jest po prostu nazywana zależnością. Jednak wielowartościowa zależność nie jest po prostu nazywana zależnością, ponieważ przyniosłaby to zamieszanie. Nazywa się to zależnością wielowarstwową.

Ty, deweloper bazy danych, powiedził właścicielowi: „Powinien Cię zainteresować, że aby tabela była w 1NF, każda komórka musi mieć jedną wartość. Występuje tutaj nieco podobny problem, ale z tabelą, która jest już w BCNF po 3NF. Zależność wielowartościowa ma złożony klucz podstawowy, a każda komórka w całej tabeli ma już jedną wartość. W numerze 1NF wiele wartości w komórce nie musi dotyczyć klucza. Z problemem 4NF są co najmniej trzy kolumny. Jeśli istnieją tylko trzy kolumny, trzy kolumny tworzą główny klucz kompozytowy. W tym przypadku pierwsza kolumna komórek może określić drugą kolumnę komórek, ale druga kolumna jest niezależna od trzeciej kolumny. 4NF na to nie pozwala."

Innymi słowy, problem może polegać na tym, że druga kolumna zależy od pierwszej kolumny, a trzecia kolumna nadal zależy od pierwszej kolumny i nie ma nic do roboty pod względem zależności od drugiej kolumny. 4NF na to nie pozwala.

Przed kontynuowaniem wyjaśnienia wielowartościowej zależności, należy najpierw wyjaśnić problem czwartej normalnej formy.

Jak problem 4NF może pojawić się w sklepie z wygodą

Wyobraź sobie, że po pewnym czasie miałeś rywali (inne sklepy wygody) w swojej okolicy i nie sprzedajesz tyle, ile sprzedałeś wcześniej. Nie można tego przewidzieć, kiedy uruchomiłeś sklep wygody.

Przychodzi do ciebie, że jeśli możesz obniżyć ceny, nie niższe niż cena kosztów, oczywiście dla klientów, którzy kupują większość, kupią więcej, a sprzedaż i zysk wzrosną z spadku poziomu. Oznacza to, że musisz wiedzieć, gdzie tacy klienci opuszczają i ich adresy (ulice), abyś mógł nawet dostarczać produkty do ich domów. Znowu ten problem nie został przewidziany na początku.

I tak wymyślisz następującą tabelę, przez którą będziesz działać, aż do BCNF, zanim wydanie 4NF może się pokazać:

Dostawa

Dla ciebie właściciel, twoim zainteresowaniem jest kategoria produktu, sam produkt, który ma zostać dostarczony, oraz adres, do którego należy dostarczyć. Patrząc na całą tabelę, reszta sekcji rzędów zaczyna się od Customern do prawego końca, określają pierwsze trzy kolumny. Innymi słowy, pierwsze trzy kolumny tworzą klucz podstawowy dla reszty kolumn. To znaczy pierwsze trzy kolumny zależą od reszty kolumn według wierszy. I tak pierwsze trzy nagłówki kolumnowe muszą być podkreślone pojedynczymi liniami. Dzięki temu ta tabela jest teraz w pierwszej normalnej formie. Każda kombinacja komórek poziomych w pierwszych trzech kolumnach jest unikalna.

Ta tabela znajduje się również w drugiej normalnej formie, ponieważ każda kombinacja komórek poziomych w pierwszych trzech kolumnach jest unikalna i nie ma częściowej zależności (z powtarzanymi grupami). Nie znajduje się jednak w trzeciej normalnej formie, ponieważ sekcje wierszy (części) zaczynające się od Customern do właściwego końca, określają CustomerId (CustomerID zależy od nich). Więc wszystko, co należy usunąć, pozostawiając kopię klientaId. CustomerId jest teraz zarówno kluczem zagranicznym, jak i częścią klucza podstawowego. Tabela jest teraz w 3NF.

Przed tobą, programista i trener bazy danych może kontynuować, właściciel mówi: „Zamiast współpracować z kolumną kategorii, kolumną produktu i kolumną adresu, będę pracować z kolumną kategorii, kolumną produktu i kolumną CustomerId, ponieważ kiedyś jest CustomerId znany, adres może być znany, a to byłoby wygodniejsze, szczególnie dla komputera."

Twoja odpowiedź: „To dobrze, właściciel. Jesteś na dobrej drodze. To właśnie zostanie zrobione."

Pamiętaj, że stół klientów już istnieje. Zostało to wyprodukowane w poprzedniej części tej serii samouczka. Tak więc jedynym stołem, który ma teraz wyprodukować, jest stół po prostu ma trzy kluczowe klucze.

Permutacje dostarczania kategorii, według produktu

Niestety, kolumny tego złożonego klucza podstawowego nie są między sobą 2NF. Istnieją powtórzenia wartości komórek spadają w dół, z częściową zależnością w kluczu złożonym. Te powtórzenia nie są tak konstruktywne, jak się wydają.

Zauważ, że cukiernia jest powiązana z klientem 1, a także jest powiązana z klientem 2. Napój bezalkoholowy jest powiązany z klientem 1, a także jest powiązany z klientem 2.

Jeśli klient 1 poprosił dziś o słodycze, jutro poprosi o czekoladę (nie pokazano na stole). Nazjewy jest powiązane z klientem 1 do słodyczy na stole, ale można je również powiązać z klientem 1 przez czekoladki w dostawach jutro. Jeśli klient 1 poprosił dziś o Sprite, poprosi jutro o Coca-Cola. Napój bezalkoholowy jest powiązany z klientem 1 do sprite, w stole, ale może być również powiązany z klientem 1 do Coca-Coli. Ten sam problem z dostawą występuje w przypadku klienta 2. Ten rodzaj powtórzeń nazywa się zależnością wielowarstwową.

Zauważ, że w powyższej tabeli kolumna produktu nie ma powtórzenia (przynajmniej na razie).

Aby rozwiązać ten problem, najlepiej najpierw umieścić te powtórzenia wartości kolumny, klucza podstawowego, w pierwszej normalnej formie, aby skutkować następującymi:

Kompletne dostawy kategorii Permutacje według produktu

Permutacja oznacza zmianę kolejności układu. W tej sytuacji oznacza to podanie wszystkich możliwych zamówień produktów w kolumnie produktu. Teraz w tej tabeli jest więcej powtórzeń (więcej redundancji) niż w powyższym. Dobra wiadomość jest taka, że ​​te trzy kolumny są teraz w porządku, w pierwszej normalnej formie. 2NF i 3NF muszą być przewidziane dla tych trzech kolumn.

Przypomnij sobie, że dostawa nie była przewidziana na samym początku, kiedy rozpoczął się sklep (działał). Gdyby to zostało przewidziane, to pierwsza tabela transakcji w pierwszej części tej serii samouczka byłaby taka:

Zauważ, że wiele wartości w każdej komórce w tej kolumnie produktu mają więcej czynników niż to, co wydarzyło się w pierwszej tabeli transakcji w pierwszej części serii. Wprowadzenie tej tabeli do pierwszej normalnej formy spowodowałoby poprzednią tabelę, która jest przedrukowana tutaj, dla łatwego odniesienia do czytnika, z pewnymi modyfikacjami w kolumnie produktu:

Dwie tabele pierwszej normalnej formy są takie same, ponieważ permutacja w kolumnie produktu jest względna kolumny CustomerId. Nie zapominaj, że każdy klient tutaj identyfikuje wiersz w tabeli klientów.

Definicja wielowartościowej zależności oznacza, że ​​jeśli istnieją trzy kolumny, x, y i z oraz odpowiednio dla określonego wiersza wartości x, y i z, zależność wielowarstwowa x ->> y, oznacza, że ​​jeśli wybierzemy dowolny x faktycznie występuje w tabeli (nazwij ten wybór xC) i skompiluj listę wszystkich xCKombinacje YZ, które mogą wystąpić w tabeli, jak to zrobiono powyżej, przekonamy się, że xC jest związany z tymi samymi wpisami, niezależnie od Z. Zasadniczo obecność Z nie zapewnia żadnych użytecznych informacji o ograniczeniu możliwych wartości y.

W powyższej tabeli xC, na przykład to cukiernia, a odpowiednią wartością Y to słodycze. Połączenie cukierni i słodyczy nie ma nic wspólnego z kolumną ClientId, gdzie wartość może 1 lub 2 w wierszach. Gdyby X jest przyjmowany jako napój bezalkoholowy, odpowiednią wartością Y byłby duszka. Połączenie napoju bezalkoholowego i duszka nie ma nic wspólnego z kolumnami klientów, w których wartość może 1 lub 2 w rzędach.

Widoczne z drugiej normalnej formy i funkcjonalnych punktów zależności widzenia, kolumna kategorii zależy od kolumny produktu, a także zależy od kolumny klienckiej, ale nie zależy od obu kolumn po połączeniu. Wartości w kolumnie produktu powtarzają się, określając wartości w kolumnie kategorii; i wartości w kolumnie ClientId powtarzają się, określając wartości w kolumnie kategorii; ale obie te kolumny nie określają wartości w kolumnie kategorii.

Tak więc tabela musi zostać podzielona na dwa, przy czym kolumny kategorii i produktów idą w jedną stronę, a kolumny kategorii i klientów idą w drugą stronę, w następujący sposób:

Kategoria- Tabela produktów

Kategoria - tabela klientów

Te dwoje dzieci jest teraz w 1NF, 2NF, 3NF, BCNF i, co najważniejsze, 4NF. Tabela kategorii Produktu ma złożone klawisze podstawowe. Tabela klientów kategorii ma również złożone klawisze podstawowe. Każdy z klawiszy kolumn jest już kluczem podstawowym w jakiejś innej tabeli w bazie danych, albo jest klawiszem obcym w innej tabeli w tej samej bazie danych.

Te dwa tabele zastępujące tabelę nadrzędną nie są jedynymi tabelami w całej bazie danych. W rzeczywistości są one związane z innymi tabelami w bazie danych. W związku z tym w projekcie projektowania bazy danych należy wykonać pewne prace domowe dotyczące całej bazy danych i tych dwóch nowych tabel.

Odnosząc się do tabeli kategorii, pamiętaj, że istnieje już tabela produktów w 4NF i tabela kategorii w 4NF w bazie danych. Aby tabela była w żadnej normalnej formie, nie powinna ono naruszać żadnej z zasad tej normalnej formy. Produkty lub tabela produktów ma produkt jako klucz podstawowy i kategorię lub kategorię jako klucz obcy.

Tak więc tabela kategorii wyprodukowana tutaj, w 4NF, powinna zostać porzucona, ponieważ następujące dwie tabele, które są w 4NF, mają wszystkie swoje informacje (i więcej):

Kategorie (kategoriaID, nazwa kategorii, opis)
Produkty (ProductID, CategoryID, SuppierId, ProductName, UnitPrice, IllityInstock, ReorderLevel)


Z drugiej strony, stolika klientów kategorii w 4NF nie może być porzucona, ponieważ wiąże się z nowymi relacjami przy dostawie. W rzeczywistości tabela powinna być lepiej nazywana, kategororyczne dostawy. Nazwanie tego produktowego dostawy byłoby wprowadzające w błąd dla programistów bazy danych, ale nie byłyby wprowadzające w błąd dla klientów, którzy są analfabetami w bazie danych. Więc nazwij to kategorią. W formularzu notacji tabeli jest to:

CategoryDelivery (kategoria, CustomerId)


Pamiętaj, że każdy klient odnosi się do wiersza w tabeli klientów. Złożony klucz podstawowy to: kategoria, CustomerId. Ponieważ istnieje już tabela kategorii z CategoryID, ta tabela powinna być faktycznie:

CategoryDelivery (CategoryID, CustomerID, kategoria)


gdzie kategoria zależy od kategorii (nazwy) i odwrotnie.

Zatem kwestia dostawy przynosi dodatkową tabelę w 4NF. Reszta tabel w bazie danych jest już w 4NF, ponieważ nie naruszają one reguł 4NF podanych poniżej.

Kwestia dostawy nie została przewidziana przed normalizacją w różnych klasach, na początku. Gdyby przewidziano, jak wskazano powyżej, przybyłoby dostawę kategorii; na lub przed trzecim stopniem normalnej formy bez wzmianki o 4NF.

Czwarte zasady normalnej formy

Tabela jest w 4NF, jeśli nie narusza następujących zasad:

  1. Jest już w normalnej formie koddującej boyce.
  2. Tabela nie ma żadnej zależności wieloosobowej.

Oznacza to, że stół może być zaprojektowany po raz pierwszy i jest już w 4NF.

Piąta normalna forma

Sytuacje 5NF rzadko występują, ale kiedy się pojawią, należy wziąć pod uwagę piątą normalną formę, aby uniknąć znanego problemu rachunkowości. Piąta normalna postać jest również znana jako projekcja łącząca normalną formę. Z piątą normalną postacią są co najmniej trzy kolumny. Jeśli istnieją tylko trzy kolumny zainteresowania, istnieje jeden złożony klucz podstawowy, który składa się z trzech kolumn.

Wyobraź sobie, że ty, właściciel, masz do dwóch sklepów wygodnych w tym samym mieście i jesteś dostarczany przez ten sam zestaw dostawców. Zadzwoń do tych sklepów, Shop1 i Shop2. Dostawcy postrzegają te dwa różne sklepy jako dwóch różnych klientów. Więc tutaj klient ma inne znaczenie. Oznacza to robić zakupy, a nie osobę. Znaczenie produktu pozostaje takie samo.

Jest więc stół z głównymi klawiszami: dostawca, produkt i klient. To jest:

Tabela (dostawca, produkt, klient)


Problem 5NF pojawia się, gdy dany dostawca może dostarczyć dany produkt więcej niż jednemu klientowi (dwa sklepy). Ponadto dany klient może otrzymać dany produkt od więcej niż jednego dostawcy. A dany klient może odbierać od różnych dostawców różnych produktów. Oznacza to, że każdy z trzech partnerów może zrobić to samo z pozostałymi dwoma partnerami.

Oznacza to, że jeden dostawca może odpowiadać więcej niż jednego klienta. Jeden klient może odpowiadać więcej niż jednego produktu. A jeden produkt może odpowiadać więcej niż jednego dostawcy. Oznacza to, że mogą wynikać z następujących trzech tabel binarnych:

Tabela dostawców-klient
Tabela produktu klienta
Tabela produktu


Jeśli tabela nadrzędna może zostać podzielona na trzy mniejsze tabele bez utraty lub dodawania informacji, a jeśli tabele zostaną połączone, nadal nie ma utraty lub dodawania informacji, tabela nadrzędna powinna zostać rozbita. Mniejsze tabele są w 5nf. W takim przypadku zależność połączenia została wyeliminowana. Utrata informacji oznacza utratę relacji z wierszami, a dodanie informacji oznacza dodanie nowych relacji rzędowych.

Jeśli to załamanie i złożenie powrót doprowadziłoby do utraty lub dodania informacji, nie należy się rozbić tabeli. W takim przypadku tabela nadrzędna jest już w piątej normalnej formie.

W tym momencie ty, programista i trener bazy danych, powiedz: „Właściciel, zostawiam wkładanie danych w tabele (tabela nadrzędna i trzy małe tabele) jako ćwiczenie dla Ciebie. Sprawdzę to jutro."

Piąta normalna forma

Tabela jest w 5NF, jeśli nie narusza następujących zasad:

  1. Jest już w czwartej normalnej formie.
  2. Tabela nie ma zależności.

Oznacza to, że stół może być zaprojektowany po raz pierwszy i jest już w 5NF.

Wniosek

Tabela znajduje się w normalnej formie, jeśli przestrzegane są następujące zasady:

  1. Tabela powinna już znajdować się w trzeciej normalnej formie.
  2. Żaden atrybut nieprime (kolumna) nie powinien zależeć od części złożonego klucza podstawowego.

Tabela jest w 4NF, jeśli nie narusza następujących zasad:

  1. Jest już w normalnej formie koddującej boyce.
  2. Tabela nie ma żadnej zależności wieloosobowej.

Tabela jest w 5NF, jeśli nie narusza następujących zasad:

  1. Jest już w czwartej normalnej formie.
  2. Tabela nie ma zależności.

Właściciel mówi teraz: „To wymaga wielkiego świętowania dla nas obu."

Ty, deweloper bazy danych, odpowiada: „Dlaczego nie czekamy do jutra, kiedy połączę wszystkie tabele i poprawiam tabelę produktów?"

Właściciel reaguje, uśmiechając się: „Co bym bez ciebie zrobił?"

Ty, programista bazy danych, dodaj, uśmiechając się: „Do zobaczenia jutro, w biurze." i wyjdź.