Rozdział 9. ♦ Podstawy MySQL 263
ulicy, będziemy mieli kłopot4. Adres najlepiej więc rozbić na poszczególne pola typu: miasto, ulica, numer domu, kod, co dodatkowo ułatwi wprowadzanie ewentualnych modyfikacji.
Poważnym błędem jest również umieszczenie w jednym polu wielu odwołań do innej tabeli. Załóżmy np., że chcemy zapisywać w bazie informacje o wypożyczeniach książek z biblioteki i przygotowaliśmy w tym celu tabelę Wypożyczenia o strukturze przedstawionej na rysunku 9.28. Zawiera ona pole KI i ent Id, które jest kluczem obcym pochodzącym z tabeli identyfikującej klientów, pole Data, w którym zapisywana będą daty wypożyczeń, i pole Książka Id, które jest kluczem obcym pochodzącym z tabeli zawierającej dane książek.
Wypożyczenia Klientld Książka Id Data_
Rysunek 9.28.
Struktura tabeli
Wypożyczenia
Jeśli zatem jeden klient za jednym razem wypożyczy kilka książek, a my ten fakt w bazie odnotujemy w sposób przedstawiony na rysunku 9.29, popełnimy oczywiście błąd. Co prawda w tabeli znajdują się wszelkie niezbędne informacje, i wiemy np. że klient o identyfikatorze 1 wypożyczył 05 maja 2005 roku trzy książki, o identyfikatorach 1, 18 i 24, ale bardzo trudno będzie nam już uzyskać jakiekolwiek informacje statystyczne. Jak bowiem sprawdzić, ile razy w danym okresie była wypożyczana dana książka, albo jakiego typu książki najchętniej wypożycza klient o identyfikatorze 4?
Klientld |
Ksiąźkald |
Data |
1 6 |
1,18, 24 2 |
2005-05-05 2005-05-05 |
4 |
2, 14 |
2005-06-01 |
Rysunek 9.29.
Przykładowe dane w tabeli Wypożyczenia
Wydobycie tego typu informacji wymagałoby analizy zawartości kolumny Książka Id, a tym samym sporo dodatkowej pracy od programisty. Tymczasem prawidłowe zapisanie danych w tabeli Wypożyczenia spowoduje, że uzyskiwanie wszelkich informacji dotyczących wypożyczeń będzie możliwe jedynie przy użyciu typowych zapytań do bazy (o czym będzie mowa w kolejnym rozdziale). Prawidłowe zapisanie oznacza w tym wypadku, że dane dotyczące wypożyczenia każdej książki muszą być zapisane w osobnych wierszach tabeli, czyli każde wypożyczenie to jeden wiersz. W przypadku danych z rysunku 9.29 prawidłowa postać tabeli wypożyczenia wyglądałaby tak, jak na rysunku 9.30.
Należy unikać pozostawiania w tabelach pustych pól, czyli pól niezawierających danych. W niektórych sytuacjach istnienie takich pól może być co prawda konieczne, jeśli jednak miałoby się pojawić ich w jakiejś tabeli bardzo dużo, należy raczej zastanowić
Choć oczywiście odpowiednio skonstruowane zapytanie (czasami wspomagane przetwarzaniem danych po stronie klienta) poradzi sobie z takim problemem.