Normalizacja w bazie danych
Normalizacja w bazie danych to proces organizacji danych w sposób, który minimalizuje redundancję (czyli powielanie danych) oraz zapewnia spójność i integralność informacji. Celem normalizacji jest podzielenie danych na mniejsze, bardziej logicznie powiązane tabele oraz zapewnienie, że każda informacja występuje w bazie tylko raz.
Główne zasady normalizacji opierają się na tzw. postaciach normalnych (ang. normal forms). Oto podstawowe etapy normalizacji i postaci normalne:
1. Pierwsza postać normalna (1NF)
Tabela jest w pierwszej postaci normalnej, jeśli:
- Wszystkie kolumny zawierają tylko atomowe (czyli niepodzielne) wartości, tzn. każda kolumna zawiera pojedynczą wartość, a nie listy wartości.
- W każdej kolumnie wszystkie wartości są tego samego typu (np. same liczby, same teksty).
Przykład naruszenia 1NF:
ID Klienta | Imię | Zakupy |
---|---|---|
1 | Jan | Telefon, Laptop |
2 | Anna | Tablet |
Z kolumną „Zakupy” jest problem, ponieważ zawiera ona listę zakupów (czyli wiele wartości w jednej komórce). Aby spełnić 1NF, każdą wartość powinniśmy oddzielić:
ID Klienta | Imię | Zakup |
---|---|---|
1 | Jan | Telefon |
1 | Jan | Laptop |
2 | Anna | Tablet |
2. Druga postać normalna (2NF)
Tabela jest w drugiej postaci normalnej, jeśli:
- Spełnia wymagania 1NF.
- Wszystkie kolumny, które nie są kluczami, zależą całkowicie od całego klucza głównego (czyli nie mogą zależeć od części klucza, jeśli klucz główny jest złożony z więcej niż jednej kolumny).
Przykład naruszenia 2NF: Załóżmy, że mamy tabelę zamówień, gdzie klucz główny składa się z „ID Klienta” i „ID Produktu”, ale dodatkowo jest tam kolumna „Imię Klienta”:
ID Klienta | ID Produktu | Imię Klienta | Cena Produktu |
---|---|---|---|
1 | 101 | Jan | 200 |
1 | 102 | Jan | 150 |
Kolumna „Imię Klienta” zależy tylko od „ID Klienta”, a nie od całego klucza głównego (który składa się z „ID Klienta” i „ID Produktu”), co narusza 2NF. Rozwiązaniem jest przeniesienie danych o klientach do osobnej tabeli.
Poprawna wersja: Tabela Klientów:
ID Klienta | Imię |
---|---|
1 | Jan |
2 | Anna |
Tabela Zamówień:
ID Klienta | ID Produktu | Cena Produktu |
---|---|---|
1 | 101 | 200 |
1 | 102 | 150 |
3. Trzecia postać normalna (3NF)
Tabela jest w trzeciej postaci normalnej, jeśli:
- Spełnia wymagania 2NF.
- Żadne pole, które nie jest kluczem, nie zależy od innych pól niebędących kluczami. Innymi słowy, kolumny muszą zależeć wyłącznie od klucza głównego, a nie od innych kolumn.
Przykład naruszenia 3NF: Tabela z danymi o pracownikach:
ID Pracownika | Imię | Adres | Miasto | Kod Pocztowy |
---|---|---|---|---|
1 | Adam | ul. Długa 123 | Warszawa | 00-001 |
2 | Ewa | ul. Krótka 45 | Kraków | 30-001 |
Kolumny „Miasto” i „Kod Pocztowy” nie zależą bezpośrednio od klucza głównego „ID Pracownika”, ale od siebie nawzajem (kod pocztowy zależy od miasta). Żeby to naprawić, trzeba rozbić dane na dwie tabele:
Tabela Pracowników:
ID Pracownika | Imię | Adres | Miasto |
---|---|---|---|
1 | Adam | ul. Długa 123 | Warszawa |
2 | Ewa | ul. Krótka 45 | Kraków |
Tabela Miast i Kodów Pocztowych:
Miasto | Kod Pocztowy |
---|---|
Warszawa | 00-001 |
Kraków | 30-001 |
Zalety normalizacji:
- Zmniejszenie redundancji danych: informacje nie są powielane w wielu miejscach.
- Zwiększenie integralności danych: zmiany w danych są łatwiejsze do zarządzania (np. zmiana nazwiska klienta w jednym miejscu aktualizuje je wszędzie).
- Optymalizacja zapytań: mniejsze, wyspecjalizowane tabele mogą sprawniej obsługiwać zapytania.
Wady normalizacji:
- Złożoność zapytań: wiele znormalizowanych tabel może wymagać bardziej skomplikowanych zapytań (np. połączeń wielu tabel).
- Czas operacji: przy skomplikowanych zapytaniach może wystąpić większe obciążenie systemu z powodu licznych operacji JOIN.
Podsumowując, normalizacja to proces przekształcania danych w taki sposób, by były przechowywane w najbardziej efektywny i bezpieczny sposób, z minimalną redundancją.
Komentarze
Prześlij komentarz