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[1], 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[2]. 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[3]. 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ą Ocena[4]i 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[5], 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.
[1] wywoływane poprzez klikniecie na linii obrazującej powiązanie.
[2] 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.
[3] 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.
[4] 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.
[5] Co w większości przypadków przedstawia tzw. stan "normalny".
gwiazda11122