database normalization tutorial
W tym samouczku wyjaśniono, czym jest normalizacja bazy danych i różne formy normalne, takie jak 1NF 2NF 3NF i BCNF, z przykładami kodu SQL:
Normalizacja bazy danych to dobrze znana technika używana do projektowania schematów bazy danych.
Głównym celem stosowania techniki normalizacji jest zmniejszenie nadmiarowości i zależności danych. Normalizacja pomaga nam rozbić duże tabele na wiele małych tabel poprzez zdefiniowanie logicznej relacji między tymi tabelami.
Czego się nauczysz:
- Co to jest normalizacja bazy danych?
- Wniosek
Co to jest normalizacja bazy danych?
Normalizacja bazy danych lub normalizacja SQL pomaga nam grupować powiązane dane w jednej tabeli. Wszelkie dane atrybutywne lub dane pośrednio powiązane są umieszczane w różnych tabelach, a tabele te są powiązane logiczną relacją między tabelami nadrzędnymi i podrzędnymi.
W 1970 roku Edgar F. Codd wymyślił koncepcję normalizacji. Udostępnił artykuł zatytułowany „Relacyjny model danych dla dużych banków współdzielonych”, w którym zaproponował „Pierwsza normalna forma (1NF)”.
Zalety normalizacji DBMS
Normalizacja bazy danych zapewnia następujące podstawowe korzyści:
- Normalizacja zwiększa spójność danych, ponieważ pozwala uniknąć duplikacji danych, przechowując je tylko w jednym miejscu.
- Normalizacja pomaga w grupowaniu podobnych lub powiązanych danych w ramach tego samego schematu, co skutkuje lepszym grupowaniem danych.
- Normalizacja przyspiesza wyszukiwanie, ponieważ indeksy można tworzyć szybciej. W związku z tym znormalizowana baza danych lub tabela jest używana do przetwarzania OLTP (Online Transaction Processing).
Wady normalizacji bazy danych
Normalizacja DBMS ma następujące wady:
- Nie możemy znaleźć powiązanych danych, powiedzmy, dla produktu lub pracownika w jednym miejscu i musimy dołączyć do więcej niż jednej tabeli. Powoduje to opóźnienie w pobieraniu danych.
- W związku z tym normalizacja nie jest dobrą opcją w transakcjach OLAP (przetwarzanie analityczne online).
Zanim przejdziemy dalej, przyjrzyjmy się następującym terminom:
- Jednostka: Encja to rzeczywisty obiekt, w którym dane skojarzone z takim obiektem są przechowywane w tabeli. Przykładem takich obiektów są pracownicy, wydziały, studenci itp.
- Atrybuty: Atrybuty to cechy jednostki, które dają pewne informacje o jednostce. Na przykład, jeśli tabele są jednostkami, to kolumny są ich atrybutami.
Rodzaje normalnych form
# 1) 1NF (pierwsza normalna forma)
Z definicji jednostka, która nie ma żadnych powtarzających się kolumn ani grup danych, może być określana jako Pierwsza normalna postać. W pierwszej normalnej formie każda kolumna jest wyjątkowa.
Oto jak wyglądałaby nasza tabela Pracownicy i dział, gdyby była w pierwszej normalnej formie (1NF):
empNum | nazwisko | Imię | deptName | deptCity | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jacek | Konta | Nowy Jork | Stany Zjednoczone |
1002 | Schwatz | Mikrofon | Technologia | Nowy Jork | Stany Zjednoczone |
1009 | Puchar | Złupić | HR | Berlin | Niemcy |
1007 | Harvey | Parker | Administrator | Londyn | Zjednoczone Królestwo |
1007 | Harvey | Parker | HR | Londyn | Zjednoczone Królestwo |
Tutaj wszystkie kolumny tabel pracowników i działów zostały zebrane w jedną i nie ma potrzeby łączenia kolumn, takich jak deptNum, ponieważ wszystkie dane są dostępne w jednym miejscu.
Ale taka tabela ze wszystkimi wymaganymi kolumnami byłaby nie tylko trudna w zarządzaniu, ale także trudna do wykonywania operacji, a także nieefektywna z punktu widzenia przechowywania.
# 2) 2NF (druga normalna forma)
Z definicji jednostka, która jest 1NF, a jeden z jej atrybutów jest zdefiniowany jako klucz podstawowy, a pozostałe atrybuty są zależne od klucza podstawowego.
Poniżej znajduje się przykład, jak wyglądałaby tabela pracowników i działów:
Tabela pracowników:
empNum | nazwisko | Imię |
---|---|---|
1001 | Andrews | Jacek |
1002 | Schwatz | Mikrofon |
1009 | Puchar | Złupić |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Tabela działów:
deptNum | deptName | deptCity | deptCountry |
---|---|---|---|
jeden | Konta | Nowy Jork | Stany Zjednoczone |
dwa | Technologia | Nowy Jork | Stany Zjednoczone |
3 | HR | Berlin | Niemcy |
4 | Administrator | Londyn | Zjednoczone Królestwo |
Tabela EmpDept:
empDeptID | empNum | deptNum |
---|---|---|
jeden | 1001 | jeden |
dwa | 1002 | dwa |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Tutaj możemy zauważyć, że podzieliliśmy tabelę w formie 1NF na trzy różne tabele. Tabela Pracownicy to jednostka dotycząca wszystkich pracowników firmy, a jej atrybuty opisują właściwości każdego pracownika. Podstawowym kluczem tej tabeli jest empNum.
Podobnie tabela Departments to encja dotycząca wszystkich działów w firmie, a jej atrybuty opisują właściwości każdego działu. Podstawowym kluczem tej tabeli jest deptNum.
W trzeciej tabeli połączyliśmy klucze podstawowe obu tabel. Klucze podstawowe tabel Pracownicy i Działy są nazywane kluczami obcymi w tej trzeciej tabeli.
Jeśli użytkownik chce uzyskać wynik podobny do tego, który mieliśmy w 1NF, to musi połączyć wszystkie trzy tabele, używając kluczy podstawowych.
Przykładowe zapytanie wyglądałoby tak, jak pokazano poniżej:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (trzecia postać normalna)
Z definicji tabelę uważa się za trzecią normalną, jeśli tabela / jednostka jest już w drugiej postaci normalnej, a kolumny tabeli / jednostki nie są przejściowo zależne od klucza podstawowego.
Zrozummy zależność nieprzechodnią, korzystając z następującego przykładu.
Powiedz, że tabela o nazwie Customer ma następujące kolumny:
Identyfikator klienta - Klucz podstawowy identyfikujący unikalnego klienta
CustomerZIP - Kod pocztowy miejsca zamieszkania klienta
CustomerCity - Miasto, w którym mieszka klient
W powyższym przypadku kolumna CustomerCity jest zależna od kolumny CustomerZIP, a kolumna CustomerZIP jest zależna od CustomerID.
Powyższy scenariusz nazywa się przechodnią zależnością kolumny CustomerCity od CustomerID, czyli klucza podstawowego. Po zrozumieniu zależności przechodnich omówmy teraz problem z tą zależnością.
Może istnieć scenariusz, w którym niepożądana aktualizacja tabeli zostanie dokonana w celu zaktualizowania CustomerZIP do kodu pocztowego innego miasta bez aktualizacji CustomerCity, co spowoduje pozostawienie bazy danych w niespójnym stanie.
Aby rozwiązać ten problem, musimy usunąć zależność przechodnią, którą można by zrobić, tworząc inną tabelę, powiedzmy, tabelę CustZIP, która zawiera dwie kolumny, tj. CustomerZIP (jako klucz podstawowy) i CustomerCity.
Kolumna CustomerZIP w tabeli Customer jest kluczem obcym do CustomerZIP w tabeli CustZIP. Ta relacja zapewnia, że nie ma żadnych anomalii w aktualizacjach, w których plik CustomerZIP jest aktualizowany bez wprowadzania zmian w CustomerCity.
# 4) Postać normalna Boyce-Codda (3.5 postać normalna)
Z definicji tabela jest uważana za postać normalną Boyce'a-Codda, jeśli znajduje się już w trzeciej postaci normalnej i dla każdej zależności funkcjonalnej między A i B, A powinno być super kluczem.
Ta definicja brzmi trochę skomplikowanie. Spróbujmy to przerwać, aby lepiej to zrozumieć.
- Zależność funkcjonalna: Mówi się, że atrybuty lub kolumny tabeli są zależne funkcjonalnie, gdy atrybut lub kolumna tabeli jednoznacznie identyfikuje inny atrybut (y) lub kolumnę (y) tej samej tabeli.
Na przykład, kolumna empNum lub Employee Number jednoznacznie identyfikuje inne kolumny, takie jak nazwa pracownika, wynagrodzenie pracownika itp. w tabeli Employee. - Super klucz: Pojedynczy klucz lub grupa wielu kluczy, które mogą jednoznacznie identyfikować pojedynczy wiersz w tabeli, można nazwać superkluczem. Ogólnie znamy takie klucze jak klucze kompozytowe.
Rozważmy następujący scenariusz, aby zrozumieć, kiedy pojawia się problem z trzecią formą normalną i w jaki sposób postać normalna Boyce-Codd przychodzi z pomocą.
empNum | Imię | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jacek | Nowy Jork | Konta | Raymond |
1001 | Jacek | Nowy Jork | Technologia | Donald |
1002 | Złupić | Berlin | Konta | Skrzydlak |
1007 | Parker | Londyn | HR | Elizabeth |
1007 | Parker | Londyn | Infrastruktura | Tomek |
W powyższym przykładzie pracownicy z empNum 1001 i 1007 pracują w dwóch różnych działach. Każdy dział ma szefa działu. W każdym dziale może być wielu kierowników działów. Podobnie jak w przypadku działu księgowości, Raymond i Samara są dwoma szefami działów.
W tym przypadku empNum i deptName są super kluczami, co oznacza, że deptName jest atrybutem głównym. Na podstawie tych dwóch kolumn możemy jednoznacznie zidentyfikować każdy wiersz.
Ponadto deptName zależy od deptHead, co oznacza, że deptHead nie jest atrybutem głównym. To kryterium dyskwalifikuje stół jako część BCNF.
Aby rozwiązać ten problem, podzielimy tabelę na trzy różne tabele, jak wspomniano poniżej:
Tabela pracowników:
empNum | Imię | empCity | deptNum |
---|---|---|---|
1001 | Jacek | Nowy Jork | D1 |
1001 | Jacek | Nowy Jork | D2 |
1002 | Złupić | Berlin | D1 |
1007 | Parker | Londyn | D3 |
1007 | Parker | Londyn | D4 |
Tabela działu:
deptNum | deptName | deptHead |
---|---|---|
D1 | Konta | Raymond |
D2 | Technologia | Donald |
D1 | Konta | Skrzydlak |
D3 | HR | Elizabeth |
D4 | Infrastruktura | Tomek |
# 5) Czwarta forma normalna (4 forma normalna)
Z definicji tabela ma czwartą normalną postać, jeśli nie zawiera dwóch lub więcej niezależnych danych opisujących odpowiednią jednostkę.
Przykład dopasowania regex w języku c ++
# 6) Piąta normalna forma (5 normalna forma)
Tabelę można rozpatrywać w piątej postaci normalnej tylko wtedy, gdy spełnia warunki czwartej postaci normalnej i można ją rozbić na wiele tabel bez utraty jakichkolwiek danych.
Często zadawane pytania i odpowiedzi
P # 1) Co to jest normalizacja w bazie danych?
Odpowiedź: Normalizacja bazy danych to technika projektowania. Korzystając z tego, możemy zaprojektować lub ponownie zaprojektować schematy w bazie danych, aby zmniejszyć nadmiarowe dane i zależność danych, dzieląc dane na mniejsze i bardziej odpowiednie tabele.
P # 2) Jakie są różne rodzaje normalizacji?
Odpowiedź: Poniżej przedstawiono różne typy technik normalizacji, które można zastosować do projektowania schematów baz danych:
- Pierwsza postać normalna (1NF)
- Druga postać normalna (2NF)
- Trzecia postać normalna (3NF)
- Postać normalna Boyce-Codda (3.5NF)
- Czwarta postać normalna (4NF)
- Piąta postać normalna (5NF)
P # 3) Jaki jest cel normalizacji?
Odpowiedź: Podstawowym celem normalizacji jest zmniejszenie redundancji danych, tj. Dane powinny być przechowywane tylko raz. Ma to na celu uniknięcie wszelkich anomalii danych, które mogą wystąpić, gdy próbujemy przechowywać te same dane w dwóch różnych tabelach, ale zmiany są stosowane tylko do jednej, a nie do drugiej.
P # 4) Co to jest denormalizacja?
Odpowiedź: Denormalizacja to technika zwiększająca wydajność bazy danych. Ta technika dodaje nadmiarowe dane do bazy danych, w przeciwieństwie do znormalizowanej bazy danych, która usuwa nadmiarowość danych.
Odbywa się to w ogromnych bazach danych, gdzie wykonanie JOIN w celu uzyskania danych z wielu tabel jest kosztowną sprawą. W ten sposób nadmiarowe dane są przechowywane w wielu tabelach, aby uniknąć operacji JOIN.
Wniosek
Do tej pory wszyscy przeszliśmy przez trzy formularze normalizacji bazy danych.
Teoretycznie istnieją wyższe formy normalizacji baz danych, takie jak normalna forma Boyce'a-Codda, 4NF, 5NF. Jednak 3NF jest szeroko stosowaną formą normalizacji w produkcyjnych bazach danych.
Miłego czytania !!
rekomendowane lektury
- Testowanie bazy danych za pomocą narzędzia JMeter
- MongoDB Utwórz kopię zapasową bazy danych
- Samouczek dotyczący tworzenia bazy danych MongoDB
- 10 najlepszych narzędzi do projektowania baz danych do tworzenia złożonych modeli danych
- Wydajność MongoDB: wydajność blokowania, błędy stron i profilowanie bazy danych
- Przegląd relacyjnej bazy danych Altibase Open Source
- MongoDB Database Profiler do monitorowania zapytań i wydajności
- Jak przetestować bazę danych Oracle