Celem tworzenia dobrych projektów baz danych jest między innymi wyeliminowanie nadmiarowości danych (czyli danych zduplikowanych). Aby osiągnąć ten cel, najpierw dzieli się dane na wiele tabel tematycznych, tak aby każdy fakt był reprezentowany tylko raz. Następnie w programie Access określa się sposób ponownego zestawiania tych podzielonych informacji — w tym celu w tabelach powiązanych umieszcza się pola wspólne. Jednak aby poprawnie wykonać tę czynność, należy najpierw zrozumieć relacje występujące pomiędzy tabelami, a następnie określić te relacje w bazie danych.
W tym artykule
Wprowadzenie
Po utworzeniu tabeli odpowiadającej każdemu tematowi w bazie danych należy w programie Access określić sposób, który umożliwi ponowne zestawienie tych informacji, jeśli okaże się to potrzebne. W tym celu umieszcza się pola wspólne w powiązanych ze sobą tabelach oraz definiuje relacje pomiędzy tabelami. Następnie można tworzyć zapytania, formularze i raporty, dzięki którym będą wyświetlane informacje z kilku tabel jednocześnie. Przykładowy formularz przedstawiony poniżej zawiera informacje pochodzące z kilku tabel:
1. Informacje w tym formularzu pochodzą z tabeli Klienci...
2. ...tabeli Zamówienia...
3. ...tabeli Produkty...
4. ...oraz tabeli Szczegóły zamówień.
Nazwa klienta w polu Faktura dla jest pobierana z tabeli Klienci, wartości identyfikatora zamówienia i daty zamówienia pochodzą z tabeli Zamówienia, nazwa produktu pochodzi z tabeli Produkty, a wartości ceny jednostkowej i ilości — z tabeli Szczegóły zamówień. Te tabele są powiązane ze sobą wzajemnie w różny sposób, co umożliwia przekazywanie informacji z poszczególnych tabel do formularza.
W powyższym przykładzie konieczna jest koordynacja pól w tabelach, która zagwarantuje wyświetlenie informacji dotyczących tego samego zamówienia. Taką koordynację uzyskuje się dzięki relacjom pomiędzy tabelami. Relacja pomiędzy tabelami działa przez dopasowywanie danych w polach kluczy — często są to pola o tej samej nazwie w obu tabelach. W większości przypadków te pasujące pola to klucz podstawowy z jednej tabeli, dostarczający unikatowego identyfikatora każdego rekordu, oraz klucz obcy w drugiej tabeli. Pracowników można na przykład skojarzyć z zamówieniami, za które odpowiadają, tworząc relację wykorzystującą pole Identyfikator pracownika z tabel Pracownicy i Zamówienia.
1. Pole Identyfikator pracownika występuje w obu tabelach — jako klucz podstawowy...
2. ...oraz jako klucz obcy.
Typy relacji pomiędzy tabelami
W programie Access występują trzy typy relacji pomiędzy tabelami.
-
Relacja jeden-do-wielu
Użyjmy przykładu bazy danych do śledzenia zamówień, która zawiera tabelę Klienci i tabelę Zamówienia. Klient może złożyć dowolną liczbę zamówień. W związku z tym każdemu klientowi reprezentowanemu w tabeli Klienci może odpowiadać wiele zamówień reprezentowanych w tabeli Zamówienia. Relacja pomiędzy tabelą Klienci a tabelą Zamówienia to relacja jeden-do-wielu.
Aby w projekcie bazy danych utworzyć relację jeden-do-wielu, należy klucz podstawowy znajdujący się po stronie „jeden” relacji dodać jako pole lub pola do tabeli po stronie „wiele” tej relacji. W tym przykładzie należy dodać nowe pole — jest to pole identyfikatora z tabeli Klienci — do tabeli Zamówienia i nadać mu nazwę Identyfikator klienta. Dzięki temu w programie Access będzie możliwe wyszukanie właściwego klienta dla każdego zamówienia za pomocą numeru identyfikacyjnego klienta.
-
Relacja wiele-do-wielu
Teraz przyjrzyjmy się relacji pomiędzy tabelą Produkty a tabelą Zamówienia. Jedno zamówienie może obejmować wiele produktów. Z drugiej strony jeden produkt może się znaleźć w wielu zamówieniach. Dlatego każdemu rekordowi z tabeli Zamówienia może odpowiadać wiele rekordów z tabeli Produkty. Ponadto każdemu rekordowi z tabeli Produkty może odpowiadać wiele rekordów z tabeli Zamówienia. Ta relacja to relacja wiele-do-wielu. Należy zauważyć, że aby wykryć istniejące relacje wiele-do-wielu pomiędzy tabelami, trzeba się przyjrzeć obu stronom relacji.
Aby utworzyć relację wiele-do-wielu, należy utworzyć trzecią tabelę, często zwaną tabelą skrzyżowań, która rozbija relację wiele-do-wielu na dwie relacje jeden-do-wielu. Do tej trzeciej tabeli wstawia się klucze podstawowe z obu pierwotnych tabel. Skutkiem tego trzecia tabela rejestruje każde wystąpienie relacji. Tabele Zamówienia i Produkty są na przykład powiązane relacją wiele-do-wielu zdefiniowaną przez utworzenie dwóch relacji jeden-do-wielu z tabelą Szczegóły zamówień. Każde zamówienie może dotyczyć wielu produktów, a każdy produkt może występować w wielu zamówieniach.
-
Relacja jeden-do-jednego
W relacji jeden-do-jednego z każdym rekordem w pierwszej tabeli może być związany tylko jeden pasujący rekord w drugiej tabeli, a z każdym rekordem w drugiej tabeli może być związany tylko jeden pasujący rekord w pierwszej tabeli. Ta relacja jest nietypowa, ponieważ najczęściej informacje powiązane w ten sposób są przechowywane w jednej tabeli. Za pomocą relacji jeden-do-jednego można podzielić tabelę z wieloma polami, odizolować fragment tabeli ze względów bezpieczeństwa lub przechowywać informacje odnoszące się tylko do podzbioru tabeli głównej. Określenie takiej relacji wymaga, aby w obu tabelach było używane wspólne pole.
Dlaczego warto tworzyć relacje pomiędzy tabelami?
Relacje pomiędzy tabelami można tworzyć bezpośrednio za pomocą okna Relacje lub przez przeciągnięcie pola z okienka Lista pól. Przy użyciu relacji pomiędzy tabelami w programie Access można określić sposób sprzęgania tabel, gdy trzeba ich użyć w obiekcie bazy danych. Istnieje kilka powodów, dla których warto tworzyć relacje pomiędzy tabelami przed utworzeniem innych obiektów bazy danych, takich jak formularze, zapytania i raporty.
-
Relacje pomiędzy tabelami pomagają w projektowaniu zapytań
Aby pracować z rekordami z więcej niż jednej tabeli, często należy utworzyć zapytanie sprzęgające te tabele. Zapytanie działa przez dopasowywanie wartości pola klucza podstawowego pierwszej tabeli do pola klucza obcego drugiej tabeli. Aby na przykład zwrócić wiersze zawierające zamówienia każdego klienta, należy utworzyć zapytanie sprzęgające tabelę Klienci z tabelą Zamówienia przy użyciu pola Identyfikator klienta. W oknie Relacje można ręcznie określić pola do sprzężenia. Jeśli jednak pomiędzy tabelami jest już zdefiniowana relacja, w programie Access jest podawane sprzężenie domyślne na podstawie istniejącej relacji pomiędzy tabelami. Ponadto jeśli używany jest jeden z kreatorów zapytań, w programie Access, przy użyciu informacji zebranych z już zdefiniowanych relacji pomiędzy tabelami, są przedstawiane rozszerzone opcje do wyboru i wstępnie uzupełniane ustawienia właściwości odpowiednimi wartościami domyślnymi.
-
Relacje pomiędzy tabelami pomagają w projektowaniu formularzy i raportów
Podczas projektowania formularza lub raportu w programie Access, przy użyciu informacji zebranych z już zdefiniowanych relacji pomiędzy tabelami, są przedstawiane rozszerzone opcje do wyboru i wstępnie uzupełniane ustawienia właściwości odpowiednimi wartościami domyślnymi.
-
Relacje pomiędzy tabelami to podstawa, dzięki której można wymuszać więzy integralności zapobiegające powstawaniu rekordów odłączonych w bazie danych. Rekord odłączony to rekord odwołujący się do rekordu, który nie istnieje — na przykład rekord zamówienia, który odwołuje się do nieistniejącego rekordu klienta.
Podczas projektowania bazy danych posiadane informacje dzieli się na tabele, z których każda ma klucz podstawowy. Następnie w tabelach powiązanych dodaje się klucze obce, które odwołują się do kluczy podstawowych. Te pary klucz obcy-klucz podstawowy stanowią podstawę relacji pomiędzy tabelami i zapytaniami wielotabelowymi. Ważne jest synchronizowanie tych odwołań klucz obcy-klucz podstawowy. Więzy integralności, które zależą od relacji pomiędzy tabelami, pomagają w synchronizowaniu odwołań.
Opis więzów integralności
Podczas projektowania bazy danych informacje danej bazy danych dzieli się na wiele tabel tematycznych, aby zminimalizować nadmiarowość danych. Następnie w programie Access określa się sposób ponownego zestawiania danych przez umieszczanie pól wspólnych w powiązanych tabelach. Aby na przykład utworzyć relację jeden-do-wielu, należy klucz podstawowy z tabeli po stronie „jeden” dodać jako pole w tabeli po stronie „wiele”. Aby ponownie zestawić dane, w programie Access sprawdzana jest wartość w tabeli po stronie „wiele” i wyszukiwana odpowiadającą jej wartość w tabeli po stronie „jeden”. Dzięki temu wartości w tabeli po stronie „wiele” odwołują się do odpowiednich wartości w tabeli po stronie „jeden”.
Przypuśćmy, że istnieje relacja jeden-do-wielu między tabelami Spedytorzy i Zamówienia oraz trzeba usunąć pewnego spedytora. Jeśli usuwanemu spedytorowi odpowiadają zamówienia w tabeli Zamówienia, to po usunięciu rekordu spedytora staną się one rekordami odłączonymi. Zamówienia te będą wciąż zawierać identyfikator spedytora, ale identyfikator ten nie będzie już prawidłowy, ponieważ przestanie istnieć rekord, do którego on się odwołuje.
Więzy integralności mają na celu zapobieganie powstawaniu rekordów odłączonych i synchronizowanie odwołań, tak aby ta teoretyczna sytuacja nigdy nie wystąpiła.
Więzy integralności wymusza się przez włączenie ich dla relacji pomiędzy tabelami. Jeśli więzy integralności są wymuszane, w programie Access odrzucana jest każda operacja, która naruszyłaby te więzy w danej relacji pomiędzy tabelami. Oznacza to, że w programie Access zostaną odrzucone zarówno aktualizacje zmieniające obiekt docelowy odwołania, jak i operacje usuwające obiekt docelowy odwołania. Możliwe jednak, że wystąpi całkowicie uzasadniona potrzeba zmiany klucza podstawowego spedytora, któremu odpowiadają zamówienia w tabeli Zamówienia. W takim przypadku tak naprawdę potrzebna jest automatyczna aktualizacja wszystkich wierszy, na które wpływa ta zmiana, w ramach jednej operacji w programie Access. W ten sposób program Access zapewnia wykonanie pełnej aktualizacji, dzięki czemu baza danych nie będzie niespójna w wyniku zaktualizowania tylko niektórych wierszy. Z tego powodu Access obsługuje opcję Kaskadowo aktualizuj pola pokrewne . Gdy użytkownik wymusi więzy integralności i wybierze opcję Kaskadowo aktualizuj pola pokrewne, a następnie zaktualizuje klucz podstawowy, w programie Access zostaną automatycznie zaktualizowane wszystkie pola, które odwołują się do klucza podstawowego.
Ponadto może wystąpić uzasadniona potrzeba usunięcia wiersza i wszystkich wierszy pokrewnych — na przykład rekordu Spedytor i wszystkich zamówień powiązanych z danym spedytorem. W programie Access służy do tego opcja Kaskadowo usuń rekordy pokrewne. Gdy użytkownik wymusi więzy integralności i wybierze opcję Kaskadowo usuń rekordy pokrewne, a następnie usunie rekord po stronie relacji, po której znajduje się klucz podstawowy, w programie Access zostaną automatycznie usunięte wszystkie rekordy odwołujące się do klucza podstawowego.
Wyświetlanie relacji pomiędzy tabelami
Aby wyświetlić relacje pomiędzy tabelami, należy kliknąć pozycję Relacje na karcie Narzędzia bazy danych. Zostanie otworzone okno Relacje zawierające wszystkie istniejące relacje. Jeśli relacje pomiędzy tabelami nie zostały jeszcze zdefiniowane i okno Relacje jest otwierane pierwszy raz, w programie Access zostanie wyświetlony monit o dodanie tabeli lub zapytania do okna.
Otwieranie okna Relacje
-
Kliknij pozycję Plik, kliknij pozycję Otwórz, a następnie wybierz i otwórz bazę danych.
-
Na karcie Narzędzia bazy danych w grupie Relacje kliknij pozycję Relacje.
-
Na karcie Projekt relacji w grupie Relacje kliknij pozycję Wszystkie relacje.
Spowoduje to wyświetlenie wszystkich zdefiniowanych relacji w bazie danych. Należy pamiętać, że tabele ukryte (czyli tabele, dla których zaznaczono pole wyboru Ukryty w oknie dialogowym Właściwości) oraz ich relacje nie zostaną wyświetlone, chyba że w oknie dialogowym Opcje nawigacji jest zaznaczone pole wyboru Pokaż ukryte obiekty.
Relację pomiędzy tabelami reprezentuje linia relacji narysowana między tabelami w oknie Relacje. Jeśli w relacji nie są wymuszane więzy integralności, to ma ona postać cienkiej linii między polami wspólnymi obsługującymi relację. Zaznaczenie relacji przez kliknięcie linii powoduje pogrubienie tej linii. Jeśli w relacji są wymuszane więzy integralności, linia jest grubsza na obu końcach. Ponadto nad grubszym fragmentem linii po jednej stronie relacji jest wyświetlana liczba 1, a nad grubszym fragmentem po drugiej stronie jest wyświetlany symbol nieskończoności (∞).
Gdy okno Relacje jest aktywne, dostępne są następujące polecenia na Wstążce:
Na karcie Projekt relacji w grupie Narzędzia :
-
Edytuj relacje Otwiera okno dialogowe Edytowanie relacji. Po zaznaczeniu linii relacji można kliknąć przycisk Edytuj relacje, aby zmienić relację pomiędzy tabelami. Można także kliknąć dwukrotnie linię relacji.
-
Wyczyść układ Usuwa wszystkie tabele i relacje z widoku w oknie Relacje. Należy pamiętać, że to polecenie tylko ukrywa tabele i relacje — nie usuwa ich w rzeczywistości.
-
Raport relacji Tworzy raport, w którym wyświetlane są tabele i relacje zawarte w bazie danych. Raport pokazuje tylko tabele i relacje, które nie są ukryte w oknie Relacje.
Na karcie Projekt relacji w grupie Relacje :
-
Dodawanie tabel Umożliwia zaznaczenie tabel do pokazania w oknie Relacje.
-
Ukryj tabelę Ukrywa wybraną tabelę w oknie Relacje.
-
Relacje bezpośrednie Wyświetla w oknie Relacje wszystkie relacje i tabele powiązane odpowiadające wybranej tabeli (jeśli nie są jeszcze wyświetlone).
-
Wszystkie relacje Wyświetla w oknie Relacje wszystkie relacje i tabele pokrewne znajdujące się w bazie danych. Należy pamiętać, że tabele ukryte (czyli tabele, dla których zaznaczono pole wyboru Ukryty w oknie dialogowym Właściwości) oraz ich relacje nie zostaną wyświetlone, chyba że w oknie dialogowym Opcje nawigacji jest wybrana opcja Pokaż ukryte obiekty.
-
Zamknij Zamyka okno Relacje. Jeśli w układzie okna Relacje zostały wprowadzone zmiany, zostanie wyświetlony monit o ich zapisanie.