Przejdź do treści
Read this post in: de_DEen_USes_ESfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW
Home » Data Modeling / Database » Kompletny przewodnik po normalizacji baz danych z przykładami

Kompletny przewodnik po normalizacji baz danych z przykładami

Wprowadzenie

Normalizacja baz danych to kluczowy pojęcie w świecie zarządzania bazami danych. Jest to proces optymalizujący strukturę bazy danych poprzez zmniejszanie nadmiarowości danych i poprawę integralności danych. Normalizacja to zestaw zasad i wytycznych pomagających efektywnie organizować dane i zapobiegać typowym anomalii danych, takim jak anomalie aktualizacji, wstawiania i usuwania.

W tym artykule omówimy podstawy normalizacji baz danych, różne formy normalne oraz przedstawimy praktyczne przykłady ilustrujące każdą z tych poziomów normalizacji.

Dlaczego normalizować bazę danych?

Zanim przejdziemy do szczegółów normalizacji baz danych, konieczne jest zrozumienie, dlaczego jest to niezbędne. Normalizacja oferuje kilka zalet:

  1. Integralność danych: Normalizacja pomaga utrzymać dokładność i spójność danych poprzez zmniejszanie nadmiarowości. Gdy dane są przechowywane w sposób niepowtarzalny, są mniej podatne na błędy.
  2. Efektywne przechowywanie: Bazy danych normalizowane zajmują zazwyczaj mniej miejsca na dysku, ponieważ minimalizuje się dane powtarzające się. Spowodowane jest to zmniejszeniem całkowitych kosztów przechowywania.
  3. Optymalizacja zapytań: Zapytania stają się bardziej efektywne w bazach danych normalizowanych, ponieważ wymagają dostępu do mniejszych, dobrze zorganizowanych tabel zamiast dużych, nieznormalizowanych.
  4. Elastyczność: Bazy danych normalizowane są bardziej elastyczne pod względem dopasowania do zmian wymagań danych lub zasad biznesowych.

Poziomy normalizacji

Normalizacja baz danych zwykle dzieli się na kilka poziomów, nazywanych formami normalnymi. Najczęściej używanymi formami normalnymi są:

  1. Pierwsza forma normalna (1NF): Gwarantuje, że każda kolumna w tabeli zawiera wartości atomowe, niepodzielne. Nie powinno być powtarzających się grup, a każda kolumna powinna mieć unikalną nazwę.
  2. Druga forma normalna (2NF): Opierając się na 1NF, 2NF eliminuje zależności częściowe. Tabela znajduje się w 2NF, jeśli jest w 1NF i wszystkie atrybuty niekluczowe są funkcyjnie zależne od całego klucza głównego.
  3. Trzecia forma normalna (3NF): Opierając się na 2NF, 3NF eliminuje zależności przechodnie. Tabela znajduje się w 3NF, jeśli jest w 2NF i wszystkie atrybuty niekluczowe są funkcyjnie zależne od klucza głównego, ale nie od innych atrybutów niekluczowych.
  4. Forma normalna Boyce’a-Codd’a (BCNF): Bardziej rygorystyczna wersja 3NF, BCNF gwarantuje, że każda nietrywialna zależność funkcyjna jest kluczem super. Oznacza to, że nie są dozwolone zależności częściowe ani przechodnie.
  5. Czwarta forma normalna (4NF): 4NF dotyczy zależności wielowartościowych, w których atrybut zależy od innego atrybutu, ale nie jest funkcją klucza głównego.
  6. Piąta forma normalna (5NF) lub forma normalna projektowania-złączania (PJNF): Te formy normalne dotyczą przypadków, gdy tabela znajduje się w 4NF, ale istnieją zależności złączania, które można dalej zoptymalizować.

Teraz przedstawimy te formy normalne na przykładach:

Pierwsza forma normalna (1NF)

Rozważ tabelę nieznormalizowaną przechowującą zamówienia klientów:

IDZamówienia Klient Produkty
1 John Jabłka, Banany, Pomarańcze
2 Alice Winogrona, Truskawki
3 Bob Limonki, Limesy

Ta tabela narusza 1NF, ponieważ kolumnaProdukty zawiera listę elementów. Aby sprowadzić ją do 1NF, dzielimy produkty na osobne wiersze:

IDZamówienia Klient Produkt
1 John Jabłka
1 John Banany
1 John Pomarańcze
2 Alice Winogrony
2 Alice Truskawki
3 Bob Cytryny
3 Bob Limonki

Teraz każdy komórka zawiera wartość atomową, a tabela jest w 1NF.

Drugą postać normalną (2NF)

Zastanów się nad tabelą, która przechowuje informacje o studentach i ich kursach:

ID studenta ID kursu Nazwa kursu Przywódcy
1 101 Matematyka Prof. Smith
1 102 Fizyka Prof. Johnson
2 101 Matematyka Prof. Smith
3 103 Historia Prof. Davis

Ta tabela narusza 2NF, ponieważ Przedmiot atrybut zależy od obu IDStudenta i IDPrzedmiotu. Aby osiągnąć 2NF, dzielimy tabelę na dwie osobne tabele:

Tabela Studentów:

IDStudenta ImięStudenta
1 John
2 Alice
3 Bob

Tabela Przedmiotów:

IDPrzedmiotu NazwaPrzedmiotu Przedmiot
101 Matematyka Prof. Smith
102 Fizyka Prof. Johnson
103 Historia Prof. Davis

Teraz, Instruktor atrybut zależy tylko od CourseID, a tabela jest w 2NF.

Trzecia postać normalna (3NF)

Rozważ tabelę przechowującą informacje o pracownikach i ich projektach:

IDPracownika IDProjektu NazwaProjektu Menadżer
1 101 ProjektA John
1 102 ProjektB Alice
2 101 ProjektA John
3 103 ProjektC Bob

Ta tabela narusza 3NF, ponieważ Menadżer atrybut zależy od IDPracownika, nie bezpośrednio od klucza podstawowego. Aby sprowadzić to do 3NF, dzielimy tabelę na dwie osobne tabele:

Tabela Pracownicy:

IDPracownika ImięPracownika
1 Jan
2 Alice
3 Bob

Tabela Projekty:

IDProjektu NazwaProjektu
101 ProjektA
102 ProjektB
103 ProjektC

Tabela PracownicyProjekty:

IDPracownika IDProjektu
1 101
1 102
2 101
3 103

Teraz, a Menadżer atrybut zależy od ProjectID, a tabela jest w 3NF.

Postać normalna Boyce’a-Codd’a (BCNF)

BCNF to bardziej rygorystyczna wersja 3NF. Aby ilustrować BCNF, rozważmy tabelę przechowującą informacje o profesorach i ich obszarach badań:

ID_Profesora ObszarBadawczy NumerBiura
1 Sztuczna Inteligencja 101
2 Uczenie Maszynowe 102
3 Sztuczna Inteligencja 103

Ta tabela narusza BCNF, ponieważ istnieje nietrywialna zależność funkcyjna między ObszarBadawczy i NumerBiura (tj. numer biura zależy od obszaru badawczego). Aby osiągnąć BCNF, dzielimy tabelę na dwie osobne tabele:

Tabela Profesorów:

ID_Profesora ImięProfesora
1 Prof. Smith
2 Prof. Johnson
3 Prof. Davis

Tabela ResearchAreas:

ObszarBadawczy NumerBiura
Sztuczna Inteligencja 101
Uczenie Maszynowe 102

Tabela ProfessorResearch:

IDProfesora ObszarBadawczy
1 Sztuczna Inteligencja
2 Uczenie Maszynowe
3 Sztuczna Inteligencja

Teraz tabela jest w BCNF, ponieważ nie ma nietrywialnych zależności funkcyjnych.

Czwarta postać normalna (4NF)

4NF dotyczy zależności wielowartościowych. Rozważ tabelę przechowującą informacje o książkach i ich autorach:

IDKsiazki Tytuł Autorzy
1 KsiazkaA AuthorX, AuthorY
2 BookB AuthorY, AuthorZ
3 BookC AuthorX

Ta tabela narusza 4NF, ponieważ istnieje zależność wielowartościowa między BookID i Autorzy. Aby osiągnąć 4NF, dzielimy tabelę na trzy osobne tabele:

Tabela Książek:

BookID Tytuł
1 BookA
2 BookB
3 BookC

Tabela Autorów:

AuthorID ImięAutora
1 AuthorX
2 AuthorY
3 AuthorZ

Tabela BookAuthors:

BookID AuthorID
1 1
1 2
2 2
2 3
3 1

Teraz każda tabela jest w 4NF, a zależności wielowartościowe zostały usunięte.

Piąta postać normalna (5NF) lub postać normalna projektuj-łączy (PJNF)

5NF lub PJNF dotyczy zależności łączeniowych, które wykraczają poza zakres tego wprowadzenia. Osiągnięcie 5NF zwykle wymaga dalszej dekompozycji i jest często konieczne dla złożonych baz danych.

Wnioski

Normalizacja bazy danych to krytyczny proces w projektowaniu bazy danych, skierowany na optymalizację przechowywania danych, poprawę integralności danych i zmniejszenie anomalii danych. Poprzez organizację danych w tabelach normalnych możesz zwiększyć wydajność i utrzymywalność systemu bazy danych.

Pamiętaj, że osiągnięcie wyższych postaci normalnych, takich jak BCNF i 4NF, nie zawsze jest konieczne dla wszystkich baz danych. Poziom normalizacji zależy od specyficznych wymagań aplikacji oraz kompromisów między integralnością danych a wydajnością.

Podczas projektowania bazy danych istotne jest znalezienie równowagi między normalizacją a praktycznością. W wielu przypadkach osiągnięcie 3NF jest wystarczające, aby zapewnić integralność danych, jednocześnie utrzymując dobrą wydajność zapytań.

Zrozumienie zasad normalizacji i ich ćwiczenie na przykładach z życia wziętych jest kluczowe dla administratorów baz danych i programistów, aby tworzyć efektywne i wytrzymałe systemy baz danych.

Dodaj komentarz