CodeGym /Kursy /SQL SELF /Zasady pierwszej postaci normalnej (1NF)

Zasady pierwszej postaci normalnej (1NF)

SQL SELF
Poziom 25 , Lekcja 1
Dostępny

Zasady pierwszej postaci normalnej (1NF)

Pierwsza postać normalna (First Normal Form, 1NF) to początkowy etap normalizacji bazy danych, który nakłada surowe ograniczenia na strukturę tabel. Tabela jest w 1NF, jeśli:

  1. Wszystkie dane są atomowe. Każda wartość w komórce tabeli powinna być niepodzielna. Żegnajcie, "listy w jednej komórce"! W bazie danych tak się nie robi.
  2. Każdy wiersz jest unikalny. Czyli tabela powinna mieć klucz główny (Primary Key) lub unikalny identyfikator.
  3. Brak powtarzających się grup danych. Wartości tej samej encji nie powinny być przedstawione w tej samej kolumnie.

Mówiąc prościej, wyobraź sobie, że tabela bazy danych to twój pokój, a wartości atomowe to osobne przedmioty: lampa, stół, książka. Jeśli pokój jest zagracony (np. wszystko wrzucone do jednego kąta), nie znajdziesz lampy ani nie dowiesz się szybko, czy masz zapasowy stół. Normalizacja pomaga "poukładać wszystko na półkach".

Przykład naruszenia 1NF

Wyobraźmy sobie, że mamy tabelę studentów, gdzie trzymamy info o kursach, które uczęszczają:

student_id name courses
1 Maria "Matematyka, Fizyka"
2 Rob "Biologia, Chemia"

Co jest nie tak z tą strukturą? Kursy (kolumna courses) są zapisane przecinkiem w jednej komórce. To znaczy, że jeśli będziemy chcieli np. znaleźć wszystkich studentów, którzy uczą się fizyki, zapytanie będzie koszmarem: trzeba będzie robić skomplikowane przetwarzanie tekstu. A jeśli jeden ze studentów będzie chciał usunąć fizykę z listy — pojawi się kolejny problem. Takie dane nie są atomowe, co łamie podstawową zasadę 1NF.

Jak doprowadzić tabelę do 1NF?

Żeby rozwiązać problem, rozdzielimy dane na osobne wiersze, gdzie każda wartość w tabeli będzie atomowa:

student_id name course
1 Maria Matematyka
1 Maria Fizyka
2 Rob Biologia
2 Rob Chemia

Teraz wszystko gra. Przekształciliśmy naszą tabelę tak, żeby każda wartość w komórce była niepodzielna. To odpowiada zasadom 1NF.

Szczegółowy przykład naruszenia 1NF i poprawki

Załóżmy, że mamy tabelę zamówień sklepu internetowego:

order_id customer_name items
1001 Otto Lin "Laptop, Mysz, Klawiatura"
1002 Anna Song "Smartfon, Etui"

Oczywiste jest, że tutaj items zawiera kilka wartości oddzielonych przecinkiem, co łamie 1NF.

Żeby doprowadzić dane do 1NF, będziemy trzymać jeden wiersz na każdy produkt w zamówieniu:

order_id customer_name item
1001 Otto Lin Laptop
1001 Otto Lin Mysz
1001 Otto Lin Klawiatura
1002 Anna Song Smartfon
1002 Anna Song Etui

Teraz struktura tabeli odpowiada zasadom 1NF. Każde zamówienie i produkt są przedstawione jako osobny wiersz, a wartości są atomowe.

Dodanie klucza głównego

Po przekształceniu tabeli ważne jest, żeby dodać unikalny identyfikator (klucz główny) dla każdego wiersza, żeby zagwarantować ich unikalność. W powyższym przykładzie można użyć kombinacji order_id i item jako złożonego klucza głównego. Jednak w realu częściej tworzy się osobne pole id.

id order_id customer_name item
1 1001 Otto Lin Laptop
2 1001 Otto Lin Mysz
3 1001 Otto Lin Klawiatura
4 1002 Anna Song Smartfon
5 1002 Anna Song Etui

Zadanie praktyczne

Masz tabelę studentów z przedmiotami, które studiują, przedstawionymi w jednej komórce:

student_id name subjects
1 Polly "Matematyka, Chemia"
2 Peter "Fizyka, Informatyka"

Doprowadź tabelę do formy zgodnej z 1NF.

Po przekształceniu tabela powinna wyglądać tak:

student_id name subject
1 Polly Matematyka
1 Polly Chemia
2 Peter Fizyka
2 Peter Informatyka

Najczęstsze błędy przy pracy z 1NF

Kiedy pracujesz z bazą danych, naruszenia 1NF mogą pojawiać się w takich sytuacjach:

  • Przechowywanie list lub tablic bezpośrednio w tabeli. To najczęstszy błąd.
  • Brak unikalnego identyfikatora dla wierszy (klucza głównego). To sprawia, że twoja tabela jest podatna na duplikaty.
  • Używanie kilku kolumn do przechowywania tych samych informacji. Na przykład, "course_1", "course_2", "course_3" — zamiast poprawnej struktury.

Pamiętaj o tych rzeczach, a twoja baza danych będzie zgodna z pierwszą postacią normalną.

Praktyczne zastosowanie 1NF

W realnych projektach 1NF ma fundamentalne znaczenie. Na przykład:

  • W aplikacjach do zarządzania klientami (CRM) dane o klientach i ich działaniach muszą być atomowe. To ułatwia analizę i wyszukiwanie.
  • W sklepach internetowych 1NF jest używana, żeby efektywnie przechowywać info o zamówieniach, produktach i klientach.
  • W systemach bankowych dane o klientach, ich kontach i transakcjach muszą być atomowe, żeby nie było zamieszania między różnymi operacjami.

Przestrzeganie zasad 1NF pomaga projektować bazy danych, które wytrzymują duże obciążenia i są wygodne w użyciu. Wszystko super, ale pojawiło się duplikowanie danych. Dlatego przechodzimy do drugiej postaci normalnej (2NF), gdzie stanie się jasne, jak rozwiązywać częściowe zależności w tabelach.

Dlaczego ważne jest przestrzeganie pierwszej postaci normalnej (1NF)? Wyobraź sobie, że trzymasz dane w tabeli, gdzie w jednej komórce może być kilka wartości — na przykład lista produktów zamówionych przez klienta. W takiej formie trudno korzystać z danych: próba znalezienia wszystkich, którzy zamówili "Klawiaturę", zamienia się w męczarnię. A jeśli trzeba będzie zmienić lub usunąć część informacji, łatwo o błąd. Gdy dane są przechowywane w formie atomowej — czyli każde pole zawiera tylko jedną wartość — praca z nimi jest pewniejsza i bardziej przejrzysta. Poza tym takie tabele łatwiej skalować, aktualizować i przebudowywać, gdy zajdzie potrzeba.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION