Trzecia normalna forma

Trzecia normalna forma

To jest część trzeciej serii, pięć normalnych form. Tytuły pierwszych dwóch części (samouczki) są pierwszą normalną postacią, a następnie druga normalna postać. W tej części serii wyjaśniono trzecią normalną formę.

Wyjaśnienie jest zgodne z fabułą: ojciec zmarł i zostawił trochę pieniędzy dla swojego syna. Syn postanowił zainwestować pieniądze w sklep spożywczy. Sklep spożywczy, znany również jako sklep wygody, to niewielka firma detaliczna, która otrzymuje codzienne produkty od dostawców i sprzedaje je indywidualnym klientom w okolicy.

W tym momencie sklep jest już zaopatrzony, a niektóre sprzedaż zostały już dokonane. Syn, który jest właścicielem firmy, ma niektórych pracowników, którzy są nazywani urzędnikami w tym samouczku. Właściciel i każdy pracownik mogą otrzymywać zapasy i dokonywać sprzedaży po zarejestrowaniu produktów.

Jednak przed rozpoczęciem sklepu ani właściciel, ani pracownicy nie wiedzieli nic o normalnych formach. Tak więc nagrywali wszystko jako transakcje w jednym stole i jednej książce ćwiczeń. Nie mieli komputera.

Ty, czytelnik, ukończyłeś pięć części tej serii samouczka; Jesteś teraz programistą bazy danych. Właścicielem sklepu wygodnego jest twój przyjaciel. Odwiedziłeś sklep dwa dni temu i wyszkoliłeś właściciela i urzędników po produkcji stołu w pierwszej normalnej formie. Wczoraj odwiedziłeś również sklep i wyszkoliłeś je, jak stworzyć tabelę w drugiej normalnej formie z pierwszej normalnej formy.

Dzisiaj właśnie przybyłeś do sklepu na wizytę, aby wyszkolić ich, jak wyprodukować stół w trzeciej normalnej formie z drugiej normalnej formy. Wszystkie tabele, które obecnie mają, znajdują się w drugiej normalnej formie. Tabele (według nazwy i nagłówków kolumnowych) to:

Produkty (produkty, kategoriaID, produkt)
Kategorie (kategoria, kategoria)

Sprzedaż (SaleId, klient, pracownik, data)
Saledetails (SaleId, produktID, liczbowal, sprzedaż)

Zamówienia (zamówienie, dostawca, pracownik, data)
OrderDetails (OrderId, ProductID, liczba, koszty, koszty)

Klucze pojedyncze lub złożone są podkreślane.

Po podsumowaniu tego, czego nauczył się w ciągu ostatnich dwóch dni i zanim można było coś zrobić, właściciel pyta:

„A co z numerami telefonów, adresami itp., Dla klientów i pracowników?

A co z ilością w magazynie, poziomie kolejności itp., dla produktów?
Czy potrzebują własnych oddzielnych tabel, czy też powinny być zamontowane w obecnych tabelach?"

Ty, programista bazy danych, odpowiedz:

„Gratulacje, właściciel! Pośrednio wprowadziłeś kwestię trzeciej normalnej formy."

Kontynuujesz.

Inne niezbędne kolumny

Inne niezbędne kolumny są najpierw dodawane do poprzednich tabel, które są w 1NF i 2NF. Niektóre z poprzednich nazw kolumn są modyfikowane.

Jako minimum tabela kategorii powinna mieć następujące kolumny:

Kategorie (kategoriaID, nazwa kategorii, opis)

Opis jest krótkim akapitem opisującym kategorię. Ta tabela kategorii jest już w 1NF, 2NF i 3NF. 3NF wyjaśniono poniżej:

Jako minimum tabela produktów powinna mieć następujące kolumny:

Produkty (ProductID, CategoryID, SuppierId, ProductName, UnitPrice, IllityInstock, ReorderLevel)

Ponieważ każdy produkt jest sprzedawany, na niskim poziomie (liczba) produktów zostanie osiągnięte, gdy produkt musi zostać ponownie uporządkowany, więc klienci nie powinni przychodzić do sklepu i nie mieć produktu. Taka nieobecność nie jest dobra dla biznesu. IlistyInstock to liczba konkretnego produktu w magazynie. Obejmuje to to, co jest w sklepie i co jest na półce.

kategoria i dostawca to klawisze zagraniczne. Dlatego mają podkreślenie Dash zamiast pojedynczego podkreślenia. Klucz obcy jest wyjaśniony poniżej. W poprzedniej części serii (druga forma normalna) kategoriaID była częścią klucza podstawowego z jednym podkreśleniem ze względu. Jednak z poniższego wyjaśnienia byłoby jasne, że kategoria powinna być kluczem obce (z podkreśleniem deski rozdzielczej).

Ta tabela produktów jest już w 1NF, 2NF i 3NF. Zobacz, dlaczego jest w 3NF poniżej:

Jako minimum tabela Saledetails powinna mieć następujące kolumny:

SaleDetails (SaleId, produktId, jednostki jednostki, ilość, zniżka)

Oczekuje się, że wartość rabatowa wynosi zero przez większość czasu. Zniżka to rabat, który sklep daje klientowi.

Jako minimum tabela OrderDetails powinna mieć następujące kolumny:

OrderDetails (OrderId, ProductID, UnitCostPrice, ilość, zniżka)

Oczekuje się, że wartość rabatowa wynosi zero przez większość czasu. Zniżka tutaj jest zniżka, którą dostawca daje sklepowi.

Jak pokazano poniżej, tabela produktów można rozważyć w 2NF lub 3NF. Tabele sprzedaży i zamówień mają problem 3NF. Tylko tabela sprzedaży zostanie wykorzystana do wyjaśnienia problemu i rozwiązania. 3NF dla tabeli zamówień i produktów są zgodne z podobnym rozumowaniem i po prostu byłby cytowany.

Podczas dodawania kolumn tabela sprzedaży będzie:

Sprzedaż (SaleId, datesold Customername, telefon, adres, miasto, region, kod pocztowy, kraj, pracownik)

Siedem kolumn zastąpiło kolumnę klienta w oryginalnej tabeli. Ponieważ klienci są ludźmi w sąsiedztwie, komórki miasta, regionu (stanu), kodu pocztowego i kolumn krajowych mogą pozostać puste, choć w tym artykule nie są puste.

Ta tabela sprzedaży jest nadal w 2NF, ponieważ zarówno zasady 1NF, jak i 2NF nie zostały naruszone. Należy jednak zdać sobie sprawę, że w wierszu tabeli sprzedaży klient (nazwa) został zastąpiony siedmioma komórek rzędu klienta.

Uwaga: komórka adresowa ma numer domu, nazwisko ulicy lub drogi oraz nazwisko miasta, wszystkie oddzielone przecinkami. Miasto można uznać za złożone z kilku miast. Chociaż przecinki oddzielają te konkretne komponenty ciągów, tworzą one jedną wartość komórki, a nie trzy wartości komórki.

Kolumna pracownika musi być również zastąpiona siedem takich kolumn. Nie jest to jednak zrobione w tym samouczku, aby oszczędzać czas i przestrzeń nauczania. Tak więc tabela sprzedaży z danymi może być:

Tabela sprzedaży - 2NF - bez ClientID

Kolumna SaleId typu danych jest liczbą całkowitą lub, lepszą automatyczną reflektorem. Typ danych kolumny datesold jest datą, a nie liczbą, ponieważ ma znak „//”, który nie jest cyfrą. Typ danych dla reszty kolumn, w tym kolumna telefonu, to ciąg (lub tekst). Wartość telefonu ma znak „-”, który nie jest cyfrą.

Zauważ, że dla każdego wiersza klient (nazwa), podobnie jak w poprzedniej części serii, został zastąpiony siedem komórek, z których jedna jest nadal nazwa klienta. Oznacza to, że dane klientów są jednostką. Obecnie nazwa klienta identyfikuje swoje pozostałe sześć danych z rzędu. Jeśli ta tabela jest zaprogramowana, wygodne będzie zidentyfikowanie jednostki klienta w każdym rzędzie z liczbą całkowitą (nie automatyczną wzrost). W takim przypadku kolumna CustomerId powinna poprzedzać niestandardową nazwę. Poprzednia tabela staje się:

Tabela sprzedaży - 2NF - z klientem

Istnieją trzy klientów: 1, 2 i 3, z 1 występującym pięciokrotnie dla Johna Smitha, 2 występujące dwa razy dla Jamesa Taylora i 3 występujące raz dla Susan Wright.

Zauważ, że niektórzy klienci i ich zależni powtarzają.

Zasady trzeciej normalnej formy

Tabela jest w trzeciej normalnej formie, jeśli przestrzega następujących zasad:

  1. Powinien już znajdować się w drugiej normalnej formie.
  2. I nie powinien mieć zależności przechodniej.

Następnie jeden z urzędników (pracowników) pyta: „Jaka jest zależność przechodnia?". A ty, programista bazy danych, odpowiedz: „To dobre pytanie!"

Zależność przechodnia

Prawdą jest, że w rzędzie SaleID identyfikuje wszystkie wartości w wierszu; Jednak CustomerID identyfikuje siedem wartości danych, ale nie identyfikuje reszty wartości zidentyfikowanych przez Saleid w tym rzędzie. Innymi słowy, Saleid zależy od dziesięciu wartości komórki w każdym rzędzie. Jednak klient zależy od siedmiu wartości komórki w tym samym rzędzie, ale klient nie zależy od SaleID i innych wartości, od których zależy Saleid.

Taka zależność od kustumeridów jest zależnością przechodnia. A CustomerId nazywa się klawiszem obcego i jest podkreślony w tej serii samouczków, pięć normalnych form.

Załóżmy, że atrybut nieprime (wartość komórki nieprogowej) zależy od innych atrybutów nieprime i danego atrybutu non-prime (e.G., CustomerId i jego zależne) nie zależy od klucza podstawowego i reszty wartości komórki w rzędzie. Wtedy jest to zależność przechodnia.

Poprzednia tabela sprzedaży z zagranicznym kluczem i jego zależnymi, spowodowałaby problemy z rachunkiem (anomalie).

Tabela sprzedaży od 2NF do 3NF

Aby rozwiązać problem, który stwierdzono przez obce klucz i jego zależne, usuń obcy klucz i jego zależne, aby utworzyć nową tabelę bez powtórzeń. Jednak nawet jeśli klucz obcy nie zależy od klucza podstawowego, klucz podstawowy zależy od klucza obcego. Tak więc kopia klucza obcego musi pozostać w tabeli nadrzędnej. Nowa tabela sprzedaży, w tym momencie, jest zgodna z 1NF, 2NF i 3NF; jest to tabela nadrzędna. Nowa tabela dziecięcy z poprzedniej tabeli sprzedaży to również zgodna z 1NF, 2NF i 3NF. Nazwa stołu dla dzieci z zagranicznym kluczem i jego zależnymi są klienci. Jeśli nie można znaleźć odpowiedniej nazwy, coś poszło nie tak z analizą. Nowa tabela sprzedaży w 3NF to:

Ostateczna tabela sprzedaży w 3NF

Ta tabela w 3NF ma taką samą liczbę wierszy jak w 2NF, ale z mniejszą liczbą kolumn.

Notacja tabeli dla tej ostatecznej tabeli sprzedaży w 3NF to:

Sprzedaż (SaleId, datesold, CustomerId, EmployeEID)

SaleID jest kluczowym kluczem z jednym podkreśleniem. CustomerId to klucz obcy, z podkreśleniem deski rozdzielczej. Pracownict. Zauważ, że sytuacja pracownika w tabeli sprzedaży w 2NF jest taka sama jak sytuacja klienta. Pracownik i jego własni zależni muszą zostać wykonani, aby utworzyć inny stół; Kopia pracownika pozostaje.

Uwaga: SaleID, CustomerId i EmployeID nie tworzą klucza złożonego. SaleID zależy od klienta i pracownika.

Związek między SaleID i CustomerID jest wiele do jednego.

Tabela klientów w 3NF

Ta tabela ma trzy rzędy zamiast 9 wierszy w tabeli sprzedaży 2NF. W tej tabeli CustomerId jest kluczowym kluczem. Jest taki sam jak zagraniczny klucz w tabeli sprzedaży, ale bez powtórzeń. Klucz zagraniczny w tabeli sprzedaży i klucz podstawowy w tabeli klientów.

Powtarzane wiersze w tabeli klientów zostały usunięte, aby nie naruszać 1NF.

Jak czytelnik widzi, umieszczenie tabeli w 3NF rozwiąże problem powtarzanych wierszy (redundancja).

Notacja tabeli dla klientów jest:

Klienci (CustomerId, CustomerName, telefon, adres, miasto, region, kod pocztowy, kraj)

Rewilowany tabela produktów

Tabela produktów podana powyżej w formularzu notacji to:

Produkty (ProductID, CategoryID, SuppierId, ProductName, UnitPrice, IllityInstock, ReorderLevel)

Podstawowym kluczem tutaj jest produktd. kategoria i dostawca to klawisze zagraniczne. Podobnie jak w tabeli klientów, istnieje tabela kategorii, w której kategoriaIID jest kluczowym kluczem i istnieje tabela dostawcy, w której dostawca jest kluczowym kluczem głównym.

Jeśli wartości dla komórek dla wartości jednostkowej, ilościinstock i reorderlevel pozostaną stałe, to tabela produktów, jaka jest, jest naprawdę w 3NF. Jeśli te wartości będą się zmieniać, wówczas tabela produktów, jaka jest, znajduje się w 2NF. W tej części serii samouczka zakłada się, że wartości te pozostają ustalone z czasem.

Wszystkie tabele

Wszystkie tabele są teraz w 3NF. Są pokazane jako:

Pracownicy (pracownicy, nazwa, telefon, adres, miasto, region, kod pocztowy, kraj, data urodzenia, wynajęcie, Datereasease)

Dostawcy (dostawca, nazwa, telefon, adres, miasto, region, kod pocztowy, kraj)

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

Sprzedaż (SaleId, datesold, CustomerId, EmployeEID)
Saledetails (SaleId, produktID, liczbowal, sprzedaż)
Klienci (CustomerId, CustomerName, telefon, adres, miasto, region, kod pocztowy, kraj)

Zamówienia (OrderId, datesold, dostawca, pracownik)
OrderDetails (OrderId, ProductID, liczba, koszty, koszty)

Mamy dziewięć tabel profesjonalnych zostało wyprodukowanych tylko z jednej tabeli wyprodukowanej przez nowicjuszy, aby zapobiec redundancji i problemom rachunkowości (anomalie z wstawki, usuwania i aktualizacji). Sam stół nowicjuszy doprowadziłby do strat finansowych.

Testowanie personelu

W tym momencie wszyscy pracownicy, w tym właściciel, powinni byli zrozumieć 1NF, 2NF i 3NF. Muszą jednak zostać przetestowane. Wszyscy, w tym właściciel, będą siedzieć w różnych miejscach i zakończą test. Test składający się z jednego pytania zajmie godzinę i jest następujący:

Pytanie: Korzystanie z reguł dla 1NF, 2NF i 3NF, udowodnij, że wszystkie powyższe dziewięć tabel jest już w pierwszej normalnej formie, drugiej postaci normalnej i trzeciej normalnej formie. Klienci i dostawcy nie muszą być prawdziwymi podmiotami. Dane dla tabel powinny utworzyć kopię zapasową zapisów tabeli.

Podczas zakończenia testu, jako programista bazy danych, wybierz się na przekąskę i piwo, aby wrócić po godzinie.

Blisko i daleka przyszłość

Podczas gdy ty, deweloper bazy danych, jesteś poza domem, zastanawiasz się również, jakie porady da im to, jeśli wszystkie przejdą test.

Ponadto, podczas ich szkolenia, a teraz, kiedy zdobędą test, klienci przychodzą i wychodzą bez obsługi. To nie jest dobre dla biznesu, a ty, programista bazy danych, wiesz o tym. Niektórzy klienci mogą chodzić do sklepów z konkurentami i nigdy nie wrócić.

Ty, programista bazy danych, masz 30 lat. Właściciel, jako twój przyjaciel, ma również 30 lat. Urzędnicy (pracownicy) są w wieku od 18 do 24 lat. Wszystkie cechy, których potrzebowali do pracy dla właściciela, były: być zdrowym, aby móc czytać i pisać, być w stanie dodawać, odejmować, mnożyć i dzielić oraz móc korzystać z komputera i Internetu.

Gdy tabela jest w 3NF, większość luk w zabezpieczeniach została usunięta z bazy danych. Wiele komercyjnych baz danych nie wykracza poza 3NF, a firmy lub firmy są wygodne.

Tak więc, jeśli wszyscy przejdą test, poprosisz urzędników, aby poszli i kontynuowali pracę. Radzisz im również uratować części ich pensji, aby mogli posiadać swoje sklepy wygodne. Będziesz kontynuował szkolenie tylko właściciela w 4NF i 5NF. Z znajomością 4NF i 5NF wszystkie znane luki są usuwane.

Ocena

Po godzinie, twórca bazy danych, wrócisz. Zaznaczasz ich skrypty. Kawałek doskonałej wiadomości! Wszyscy, w tym właściciel, mają 100% każdy. Hurra! To jest świetne!

Gratulacje dla was wszystkich: nauczyciela i uczniów.

W tym samouczku nie ma nic do roboty, niż na zakończenie.

Wniosek

Tabela jest w pierwszej normalnej formie, jeśli nie narusza żadnej z następujących zasad:

  1. Wszystkie kolumny w tabeli powinny mieć unikalne nazwy nagłówka.
  2. Każda komórka musi mieć tylko jedną wartość.
  3. Wartości przechowywane w kolumnie powinny być tego samego typu.
  4. Rzędy powinny być wyraźne.
  5. Kolejność kolumn lub wierszy nie ma znaczenia.

Tabela jest w drugiej normalnej formie, jeśli nie narusza żadnej z następujących zasad:

  1. Tabela musi być już w pierwszej normalnej formie.
  2. Nie musi być częściowej zależności.

Tabela jest w trzeciej normalnej formie, jeśli nie narusza żadnej z następujących zasad:

  1. Musi już być w drugiej normalnej formie.
  2. I nie może mieć zależności przechodniej.

Ty, programista bazy danych, powiesz urzędnikom, że nauczyli się wystarczająco dużo. Udzielasz porad i prosisz ich o powrót do pracy i domyślnie na ich stacjach.

Umówiłeś się tylko z właścicielem, aby odbyć się jutro w jego biurze na szkolenie na 4NF i 5NF.