Autor: 12.10.2023
Normalizacja bazy danych i trzy postacie normalne
Ten artykuł jest zwięzłym wprowadzeniem do tematu normalizacji. Skupia się on na tzw. trzech postaciach normalnych, których znajomość jest kluczowa do zrozumienia tematu. Każda z trzech postaci normalnych zostanie omówiona z użyciem prostych przykładów. Zakładamy, że odbiorca ma podstawowe umiejętności w zakresie relacyjnych baz danych.
Pierwsza postać normalna (1NF)
1 Postać Normalna (1NF) to pierwszy poziom normalizacji danych, który zakłada, że każda komórka musi przechowywać pojedynczą, atomową wartość, a nie zestaw wartości lub struktur danych.
Spójrzmy na poniższą tabelę:
W tym przypadku kolumna roduct_name zawiera zestaw produktów, a kolumna product_price zawiera zestaw cen. Nie spełnia to wymagań 1NF, ponieważ komórki nie zawierają pojedynczych wartości.
Po normalizacji 1NF dane zostają podzielone na oddzielne wiersze - każdy wiersz zawiera pojedynczy produkt i jego cenę. Wtedy tabela może wyglądać następująco:
Teraz każdy wiersz zawiera pojedynczy produkt i jego cenę, co spełnia warunki 1NF.
Druga postać normalna (2NF)
2 Postać Normalna (2NF) to drugi poziom normalizacji danych, który spełnia 1NF oraz zakłada, że każda kolumna w tabeli musi zależeć od klucza głównego.
Spójrzmy na poniższą tabelę orders:
Powyższa tabela spełnia 1NF, ale nie spełnia 2NF. Mamy tutaj zbyt wiele informacji. Dane klienta oraz produktu zależą od identyfikatora zamówienia. Dane są zbyt powiązane. Powinniśmy oddzielić dane klienta i produktu od zamówienia. Spójrz, w jaki sposób możemy to zrobić.
Tabela z danymi klienta:
Tabela produktów:
Tabela zamówień:
Od teraz wszystkie dane niepowiązane z zamówieniami zostały przeniesione do innych tabel. Tabela zamówienia zawiera jedynie klucze obce (dowiązania) do tabel customers i products.
Trzecia postać normalna (3NF)
3 Postać Normalna (3NF) to trzeci poziom normalizacji danych, który spełnia 2NF oraz zakłada, że niekluczowa kolumna nie może zależeć od innej niekluczowej kolumny.
Przeanalizujmy tabelę produktów:
W przypadku trzeciej postaci normalnej (3NF) każda kolumna niekluczowa musi zależeć tylko od klucza głównego, a nie od innych niekluczowych kolumn. W tabeli products cena i rozmiar pizzy są kolumnami niekluczowymi, a cena jest zależna od rozmiaru, co jest niezgodne z trzecią postacią normalną (3NF). Aby spełnić tę zasadę, można utworzyć osobną tabelę product_sizes, gdzie cena byłaby związana tylko z rozmiarem produktu.
Postaramy się w taki sposób przekształcić dane, aby spełnić 3NF.
W pierwszej kolejności uzależnimy cenę od rozmiaru, ale w oddzielnej tabeli product_sizes:
W następnym kroku przebudujemy tabelę produktów:
Teraz tabela products zawiera klucz obcy size, który odnosi się do tabeli product_sizes, co umożliwia zarządzanie cenami w zależności od rozmiaru pizzy, a jednocześnie zachowuje strukturę produktów w tabeli products.
Podsumowanie
Artykuł powinien ci zapewnić zrozumienie podstawowych zasad dotyczących trzech postaci normalnych. Pełnią one bardzo ważną rolę w procesie projektowania wydajnej i spójnej bazy danych.