Rozdział 18 — Związki między tabelami
Projektując bazę danych planujemy umieszczanie danych opisujących różne typy obiektów w różnych tabelach. W efekcie unikamy błędów opisanych w poprzednim rozdziale, ale otrzymujemy pewną liczbę tabel, z których żadna nie zawiera kompletnej informacji o obiekcie. Kolejnym etapem projektu musi być ustalenie powiązań między tymi tabelami. W Accessie powiązania między tabelami nazwane zostały relacjami. Na potrzeby tej książki zarezerwujemy termin relacja na określenie pewnego skończonego zbioru odwzorowań (szerzej o relacjach, ich schematach i teorii relacyjnych baz danych piszemy w następnym rozdziale), zastępując występujący w Accessie termin relacja terminem związek lub powiązanie.
Aby uzyskać informację o imieniu ucznia i wystawionej mu ocenie semestralnej tabela Matematyka musi zostać powiązana z tabelą Uczeń. Sposób powiązania tabel przedstawia rysunek.
rys 18.1 Związek między tabelą Matematyka a Uczeń
Rysunek powinien być odpowiedzią na pytanie zadane na końcu rozdziału 17. Jeżeli nie dodalibyśmy do tabeli Matematyka kolumny ID ucznia SZBD nie byłby w stanie odpowiedzieć na pytanie, który uczeń dostał którą ocenę, chociaż wszystkie informacje o uczniach i ocenach nadal znajdowałyby się w bazie.
Związki pomiędzy tabelami przedstawiane są za pomocą linii łączących powiązane ze sobą kolumny w obu tabelach. W naszym przypadku powiązane ze sobą zostały pola Matematyka.ID ucznia i Uczen.ID ucznia. Pole ID ucznia dodaliśmy, jak pamiętamy, wyłącznie po to, aby SZBD był w stanie jednoznacznie identyfikować wszystkie dane elementarne jako opisujące tego właśnie ucznia. Dzięki temu polu informacje o imieniu i nazwisku, adresie, numerze telefonu, i imionach rodziców przypisane są do niepowtarzalnego identyfikatora. Pole tego typu, jak pole ID ucznia, będziemy nazywać kluczami.
W naszym przypadku typ powiązania powinien umożliwić każdemu z uczniów otrzymanie dowolnej liczby ocen z matematyki, jednocześnie uniemożliwiając wystawianie ocen z przedmiotu nieistniejącym uczniom. Taki typ powiązania nosi nazwę powiązania jeden do wiele, i jest symbolizowany poprzez liczbę jeden wyświetloną "od strony" tabeli Uczeń i symbol nieskończoności wyświetlany przy tabeli Matematyka. Przeglądając zawartość obu tabeli pod kątem ilości wystąpień pojedynczego identyfikatora ucznia możemy przekonać się, że dane przechowywane w tabelach spełniają warunek powiązania typu jeden do wiele.
rys 18.2 powiązane ze sobą pola z tabel Matematyka i Uczeń
Powiązanie dwóch tabel może zostać przez nas wykorzystane do dodatkowych zadań. Na rysunku 18.1, znajduje się okno właściwości powiązania, w którym możemy określić w jakim stopniu SZBD będzie wymuszał przestrzegania referencyjnych związków spójności (integralności) danych.
Access domyślnie traktuje wszystkie powiązania jako powiązania typu wiele do wielu, i w związku z tym nie sprawdza referencyjnych więzów spójności pomiędzy tabelami. Należy zawsze zmieniać domyślny typ powiązania na jeden do wielu lub jeden do jednego i włączyć wymuszanie więzów integralności poprzez zaznaczenie odpowiedniego pola w oknie właściwości relacji.
Zaznaczając pola kaskadowej aktualizacji i kaskadowego usuwania zapewniamy sobie najwyższy poziom spójności danych pomiędzy tabelami. O ile pole kaskadowej aktualizacji powinniśmy zawsze zaznaczać, o tyle zaznaczając pola kaskadowego usuwania danych narażamy się na usunięcie wraz z danymi personalnymi informacji o ocenach ucznia. Sytuację tą obrazuje rysunek 18.3.
rys 18.3 tabela Matematyka przed i po usunięciu Krzysia z tabeli Uczeń przy włączonej opcji kaskadowego usuwania danych
Drugim, oprócz jeden do wiele, typem powiązań między tabelami jest typ jeden do jednego. Ten typ powiązania wykorzystamy przy projektowaniu związku pomiędzy tabelą Uczeń a tabelą Szatnia, w której przechowywać będziemy informację o wyposażeniu szafki każdego z uczniów.
Pierwszym krokiem będzie zaprojektowanie tablicy Szatnia, według projektu przedstawionego na rys. 18.4
rys. 18.4 Projekt tabeli Szatnia
Kolejnym krokiem będzie powiązanie nowej tabeli z tabelą Uczeń, jak pokazano na rys. 18.5
rys. 18.5 Związki między tabelami Matematyka - Uczeń - Szatnia
W efekcie takiego ustawienia związków pomiędzy tabelami próba przyznania jednemu uczniowi więcej niż jednej szafki zakończy się niepowodzeniem — SZBD zgłosi błąd polegający na naruszeniu referencyjnych więzów spójności.
Znamy już praktyczne wskazówki dotyczące wyodrębniania danych elementarnych, grupowania danych w tabelach i określaniu związków pomiędzy tabelami. Możemy spróbować uzupełnić naszą bazę danych o kolejną tabelę: Nauczyciel.
rys. 18.6 Projekt tabeli Nauczyciel
Kolejnym krokiem będzie uogólnienie naszej bazy danych do takiej postaci, w której możliwe będzie przechowywanie informacji o ocenach z różnych przedmiotów, nie tylko z matematyki. Dokonamy tego zastępując tabelę Matematyka tabelą Ocenai uzupełniając ją o kolumnę Przedmiot, w której przechowywać będziemy dane o nazwie przedmiotu, z którego uczeń dostał ocenę. Dane do nowej kolumny będą pobierane z pomocniczej tabeli Lista przedmiotów, dzięki czemu dodanie nowego przedmiotu do listy prowadzonych w szkole zajęć sprowadzi się do wpisania jego nazwy do tabeli i przypisania mu nazwiska nauczyciela.
Kompletny schemat powiązań pomiędzy tabelami w bazie Dziennik przedstawia rysunek 18.7
rys 18.7 Efekt zmian w projekcie bazy danych Dziennik
Proszę zauważyć, że nie tylko nie istnieje bezpośrednie powiązanie ucznia z nauczycielem, ale również nauczyciela z wystawioną oceną. Proszę przeanalizować, jaki będzie miało to wpływ na sytuację, w której jeden przedmiot prowadzony jest przez dwóch nauczycieli.
W następnym rozdziale przedstawimy nieco bardziej formalny sposób podejścia do problemu wyznaczania danych elementarnych, grupowania danych w tabelach i określania związków między tabelami.
wywoływane poprzez klikniecie na linii obrazującej powiązanie.
SZBD, aby zachować referencyjne więzy spójności, usuwając identyfikator ucznia z tabeli Uczeń skasuje również wszystkie wiersze, w których występował ten identyfikator, z tabeli Matematyka.
Jeżeli projektując bazę danych będziemy zmuszeni na powiązanie tabel (tabeli A i tabeli B) związkiem typu wiele do wielu, to metodą wyjścia z tej sytuacji jest zaprojektowanie dodatkowej tablicy (C) i powiązanie: tablicy A z tablicą C związkiem jeden do wielu oraz tablicy B z tablicą C związkiem jeden do wielu.
Prawdopodobnie większości Czytelników od początku nie podobał się pomysł ograniczenia przedmiotów, z których oceny będą przechowywane w Dzienniku do jednego. Teraz potrafimy już ominąć to ograniczenie.
Co w większości przypadków przedstawia tzw. stan "normalny".
5 Część I ♦ Podstawy obsługi systemu WhizBang (Nagłówek strony)
5 C:\My Documents\MATURA\R-18.DOC