UWAGA! Promocja dla firm - MICROSOFT OFFICE 365  na 12 miesiecy ZA DARMO! Tylko na CentrumXP.pl!
Wielka promocja Office 365 na CentrumXP.pl!
Do góry Skomentuj

07. Normalizacja baz danych

07. Normalizacja baz danych

Autor: Grzegorz Chuchra Opublikowano: 11 stycznia 2006 Odsłon: 39 652

W artykule tym chciałbym zająć się jedną z ważniejszych kwestii związanych z relacyjnymi bazami danych, czyli ich projektowaniem. Z projektowaniem baz danych wiąże się nierozerwalnie pojęcie normalizacji. I jemu właśnie chciałbym poświęcić kolejnych kilka stron. Dowiemy się, czym jest sama normalizacja, dlaczego została zdefiniowana i tak właściwie dlaczego powinniśmy zawracać sobie nią głowę.
Artykuł ten zawiera dużą dawkę teorii, lecz jest to zaledwie kropla w morzu całego tematu związanego z pojęciem normalizacji. Jeśli ktoś będzie chciał bardziej poważnie zagłębić się w tym temacie polecam książkę J.D. Ulmana lub W. Cellarego.

Czym więc jest normalizacja? Najprościej mówiąc jest to proces polegający na wyeliminowaniu z bazy dany wszelkiej nadmiarowości. A to z kolei prowadzi do zmniejszenia ilości przechowywanych danych oraz wyeliminowaniu prawdopodobieństwa powstania anomalii i zniekształceń podczas codziennej eksploatacji.
Najłatwiej będzie to zrozumieć na przykładzie.

Przed

Po

Jak widać dzięki tej operacji udało nam się zmniejszyć ilość danych, jakie są przechowywane w repozytorium. Z każdym dodatkowym użytkownikiem zysk będzie coraz większy. Można jednak uczynić strukturę bazy jeszcze bardziej klarowną. Dodatkowy atutem będzie elastyczność jaka dzięki temu zostanie uzyskana.

Jeśli zaszłaby konieczność zmiany imienia użytkownika, nie trzeba przeszukiwać kolejno wszystkich wierszy w tabeli i przeprowadzać operacji uaktualnienia. Teraz wystarczy zmienić imię w tabeli Student, bez konieczności kosztownej operacji zmiany wielu wierszy. Tak powoli zbliżyliśmy się do zdefiniowania pierwszej postaci normalnej która głosi:

Pierwsza postać normalna

  • w poszczególnych tabelach wyeliminuj powtarzające się grupy
  • dla każdego zestawu danych pokrewnych utwórz oddzielną tabelę
  • dla każdego zestawu danych pokrewnych określ klucz podstawowy

Skoro już jesteśmy przy definicjach to możemy się pokusić o przytoczenie kolejnych postaci normalnych:

Druga postać normalna

  • utwórz oddzielne tabele dla zestawów wartości odnoszących się do wielu rekordów
  • ustal powiązania tabel za pomocą klucza obcego

Przypuśćmy, że rozważamy przeprowadzanie raportów w dziekanacie jednej z wyższych uczelni. Dane dotyczące studenta: imię, nazwisko znajdują się zarówno w tabeli związanej z stypendiami, zajęciami itp. W takiej sytuacji nie ma potrzeby przechowywać danych personalnych w każdej z tabel. Robimy więc dodatkową tabelkę ze studentami gdzie wpisujemy dane o studencie. Tak jak zostało to pokazane w powyższym przykładzie.

Trzecia postać normalna

  • wyeliminuj pola, które nie zależą od klucza

Jeśli w naszej tabeli studentów mamy wpisy dotyczące studentów z wymiany, wypada dodać kolejne kolumny dotyczące kraju, z jakiego pochodzą. Jednak w tym przypadku znacznie lepszym rozwiązaniem będzie stworzenie tabeli słownikowej (z góry ustalona lista państw) gdzie będziemy przechowywać dane dotyczące kraju, a dla każdego ze studentów dodamy tylko powiązanie z krajem, z którego pochodzi.

Tym sposobem wypisaliśmy podstawowe trzy podstawowe postacie normalizacji baz danych. Oprócz nich występuje jeszcze dwie: czwarta i piątak postać normalna. W przeciwieństwie do pierwszych trzech, które są dość intuicyjne, są one dość skomplikowane i wymagają zaprzężenia do samego procesu projektowania elementów matematyki i algorytmiki. W rzeczywistośći jednak nie wpływają one znacząco na wydajność samego repozytorium danych, a jedynie udoskonalają sam projekt.

Podsumowanie

W artykule tym przebrnęliśmy przez bardzo ważny temat z punktu widzenia poprawnego modelu baz danych. Każdy, kto poważnie myśli o projektowaniu większego systemu nie może przejść obojętnie obok zagadnienia normalizacji. Jak wspomniałem normalizacja (przynajmniej w pierwszych trzech punktach) jest procesem dość intuicyjnym i jest nieświadomie wykonywana przez większość praktyków.
Ponieważ sam proces jest dość sformalizowany, nie zawsze najlepszy projekt bazy powstaje przez ślepe podążanie za powyższymi wytycznymi. W największych systemach informatycznych często łamie się podstawowe zasady normalizacji uzyskując dzięki temu znacznie wydajniejsze i szybsze systemy. Jednak jeśli rozpoczynamy naszą przygodę z projektowaniem, powinniśmy dość rygorystycznie przestrzegać powyższych wskazówek, a z pewnością baza będzie dobrze wykonana.

Zobacz również

Komentarze

Tak jak napisane na poczatku artykułu - kropeleczka w morzu!
zyzioone, 10 czerwca 2006, 12:02
A ja na studiach dowiedzialem sie, jest 5 postaci normalnych, a nie trzy.
Kamil.Wisniewski, 21 czerwca 2006, 22:11
poprawka: autor wspomnial jednak o dwoch pozostalych (niedoczytalem artykulu do konca ;/ )
Kamil.Wisniewski, 21 czerwca 2006, 22:17
http://support.microsoft.com/default.aspx?scid=kb%3Bpl%3B283878
SocialS, 22 czerwca 2006, 12:15
takie dziobnięcie tematu jest bez sensu
Robson, 2 listopada 2007, 22:05
Takie dziobnięcie tematu jest wystarczające na 3.0.
Student Informatyki, 22 maja 2008, 17:43
Jak na początek całkiem w porządku. Może i mało ale bardzo jasno.

zksa, 24 października 2008, 15:27
wszystko super fajnie mialem to na studiach w teorii ale gdy klient zyczy sobie zeby w bazie mial te daty urodzenia czy inne takie to tego nie wyrzucisz bo nie mozesz!! wogole nie rozumiem tego tematu bo mozna sie bez niego obyc i to jest raczej dla tych co siedza w tym juz troche czasu a nie dla początkujacych!!

hirek, 4 listopada 2008, 14:57
Cienko.
woytas, 4 maja 2010, 17:01
Trochę bez ładu i składu jak dla mnie wyjaśniony temat. Ogólnie wiem co chciał przekazać autor ale tylko dlatego iż już trochę siedzę w bazach danych.
sloth, 21 sierpnia 2010, 14:50
dla poczatkujacych ok. krotko wyjasniono sens na 2 stronach, zamiast kilkudziesienciu stron zawilych wnioskow na wyklach.
D., 26 października 2010, 09:23
rekordy w ostatniej tabeli na pierwszej podstronie (StudentID|SubjectID) nie są unikalne, co jest sprzeczne z założeniami bazy danych....
mapiet, 2 stycznia 2011, 20:53
A dlaczego "w tym przypadku znacznie lepszym rozwiązaniem będzie stworzenie tabeli słownikowej"???
Pht, 1 grudnia 2011, 19:15

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.

Autor:

Komentarz:

Dodaj komentarz