Przewodnik po relacjach pomiędzy tabelami

Dotyczy
Access dla Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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 można udostępnić programowi Access sposób na połączenie podzielonych informacji — w tym celu należy umieścić pola wspólne w powiązanych tabelach. 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 dla każdego tematu w bazie danych musisz udostępnić programowi Access sposób ponownego zebrania tych informacji w razie potrzeby. 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:

Formularz Zamówienia, w którym są jednocześnie wyświetlane powiązane informacje pochodzące z pięciu tabel

1. Informacje w tym formularzu pochodzą z tabeli Klienci...

2. ... tabela Zamówienia...

3. ... tabela Produkty...

4. ... oraz tabelę 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.

Pole Identyfikator pracownika w tabeli Pracownicy jest używane jako klucz podstawowy, a w tabeli Zamówienia jako klucz obcy.

1. Identyfikator pracownika jest wyświetlany w obu tabelach — jako klucz podstawowy ...

2. ... i jako klucz obcy.

Początek strony

Typy relacji pomiędzy tabelami

W programie Access występują trzy typy relacji pomiędzy tabelami.

  • Relacja jeden-do-wielu
    Użyjmy jako przykładu bazy danych do śledzenia zamówień zawierającej 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 przypadku można na przykład dodać nowe pole — 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
    Przyjrzyjmy się teraz relacji mię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.

Początek strony

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. W programie Access relacje pomiędzy tabelami decydują, jak łączyć tabele, gdy trzeba ich używać 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 istnieje już relacja między tabelami, program Access dostarcza sprzężenie domyślne na podstawie istniejącej relacji między tabelami. Ponadto jeśli korzystasz z jednego z kreatorów zapytań, program Access używa informacji zebranych z już zdefiniowanych relacji pomiędzy tabelami, aby przedstawić Ci świadome wybory i wstępnie wypełnić 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 stosowane są informacje zebrane z już zdefiniowanych relacji pomiędzy tabelami w celu przedstawienia rozszerzonych opcji do wyboru oraz wstępnego uzupełnienia ustawień 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, aby te odwołania klucz obcy-klucz podstawowy były synchronizowane. Więzy integralności, które zależą od relacji pomiędzy tabelami, pomagają w synchronizowaniu odwołań.

Początek strony

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 możesz udostępnić programowi Access sposób na połączenie danych, umieszczając pola wspólne w powiązanych tabelach. Aby na przykład utworzyć relację jeden-do-wielu, należy dodać klucz podstawowy z tabeli po stronie „jeden” 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. Gdy ta operacja zostanie wymuszona, program Access odrzuci każdą operację, która narusza więzy integralności tej 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, że trzeba będzie całkowicie zmienić klucz podstawowy spedytora, który ma zamówienia w tabeli Zamówienia. W takim przypadku 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 utraci spójności w wyniku zaktualizowania tylko niektórych wierszy. Z tego powodu program 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, program Access automatycznie zaktualizuje wszystkie pola odwołujące 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. Z tego powodu program Access obsługuje opcję 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 klucza podstawowego relacji, program Access automatycznie usunie wszystkie rekordy odwołujące się do klucza podstawowego.

Początek strony

Wyświetlanie relacji pomiędzy tabelami

Aby wyświetlić relacje pomiędzy tabelami, kliknij pozycję Relacje na karcie Narzędzia bazy danych . Zostanie otwarte okno Relacje z wyświetlonymi istniejącymi relacjami. Jeśli relacje między tabelami nie zostały zdefiniowane i okno Relacje jest otwierane po raz pierwszy, w programie Access zostanie wyświetlony monit o dodanie tabeli lub zapytania do okna.

Otwieranie okna Relacje

  1. Kliknij pozycję Plik, kliknij pozycję Otwórz, a następnie wybierz i otwórz bazę danych.

  2. Na karcie Narzędzia bazy danych w grupie Relacje kliknij pozycję Relacje.

  3. Na karcie Projekt relacji w grupie Relacje kliknij pozycję Wszystkie relacje.

    Zostaną wyświetlone wszystkie relacje zdefiniowane 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 wyświetlania 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 wyświetlający tabele i relacje 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 wszystkie relacje i tabele pokrewne w bazie danych w oknie Relacje. 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.

Początek strony