07. Normalizacja baz danych

07. Normalizacja baz danych

Autor: Grzegorz Chuchra

Opublikowano: 1/11/2006, 12:00 AM

Liczba odsłon: 62285

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.

@STRONA@

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.