262 PHP i MySQL dla każdego
Rysunek 9.25.
Nieprawidłowa struktura tabeli Książki
Książki_
Książkald
Tytuł
Nazwa Wydawnictwa Adres Wydawnictwa
Rysunek 9.26.
Tabela Książki po wypełnieniu przykładowymi danymi
Książkald |
Tytuł |
Nazwa Wydawnictwa |
Adres Wydawnictwa |
1 2 3 |
PHP 101 praktycznych skiyptów Java Praktyczny kurs Java Leksykon kieszonkowy |
Helion SA. Helion SA. Helion SA. |
Chopina 6, Gliwice Chopina 6, Gliwice Chopina 6, Gliwice |
Choć na pierwszy rzut oka takie rozwiązanie może wydawać się bardzo czytelne, w praktyce sprawi wyłącznie problemy. Po pierwsze marnujemy ogromne ilości miejsca w bazie, gdyż dopisanie każdej nowej książki wymaga powtórzenia nazwy i adresu wydawnictwa. Jeśli więc mamy w bazie dane dotyczące 1000 książek wydawnictwa Helion, to mamy również 999 zupełnie niepotrzebnych powtórzonych wpisów dotyczących nazwy i adresu. Po drugie, jeśli przy wprowadzaniu nowych książek do bazy pomylimy się choć o jeden znak w nazwie lub adresie wydawnictwa, a przy dużej liczbie wpisów o taką pomyłkę nietrudno, dane w bazie będą niespójne. Po trzecie, jeśli wydawnictwo zmieni nazwę lub adres, trzeba będzie wprowadzić zmiany w 1000 wierszy tabeli, co naraża nas na ryzyko pomyłki. Można by wymienić jeszcze kilka problemów, ale nie ulega już chyba wątpliwości, że duplikowanie danych w tabelach jest błędem wręcz fatalnym.
Jeśli zatem podczas projektowanie zdarzy się nam utworzyć taką tabelę, należy ją rozbić na dwie tabele związane odpowiednią relacją (lub jeśli trzeba — na więcej tabel). W powyższym przykładzie byłyby to tabele: Książki, zawierająca pole Książkald (jako klucz podstawowy), Tytuł, Wydawnictwold (jako klucz obcy) oraz Wydawnictwa, zawierająca pole Wydawnictwold (jako klucz podstawowy), NazwaWydawnictwa i Adres Wydawnictwa, tak jak zostało to pokazane na rysunku 9.27.
Książki |
Wydawnictwa | |
Książkald Tytuł Wydawnictwold |
Wydawnictwold Nazwa Wydawnictwa Adres Wydawnictwa |
Rysunek 9.27.
Prawidłowa struktura tabel: Książki i Wydawnictwa
O ile to tylko możliwe, w każdym polu bazy danych należałoby zapisywać pojedyncze, atomowe informacje. Co należy uznać za informację atomową? — to zależy od konkretnego przypadku i naszego zdrowego rozsądku. Spójrzmy jednak na poprzedni przykład i strukturę widoczną na rysunku 9.26. Cały adres wydawnictwa był tam zapisywany w jednym wierszu. Czy jest to dobre rozwiązanie? Raczej nie, aczkolwiek w niektórych sytuacjach w pełni dopuszczalne (zobaczymy to w przykładach w dalszej części książki). Dlaczego nie najlepsze? Dlatego, że jeśli zechcemy odnaleźć np. wydawnictwa z danego miasta, czy nawet znajdujące się w danym mieście przy jednej