R-18.DOC

(1510 KB) Pobierz
Szablon dla tlumaczy

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[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 MatematykaUczeń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".

...
Zgłoś jeśli naruszono regulamin