Make your own free website on Tripod.com

Przejdz do:

Co to jest Access | Jak utworzyc tabelke | Jak utworzyc formularz | Jak zaprojektowac i utworzyc nowa baze danych
|Podsumowanie | Jak tworzyc raport | Jak utworzyc Kwerende

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Relacje w bazie danych

Po zaprojektowaniu różnych tabel dla poszczególnych tematów bazy danych, potrzebny jest sposób na powiązanie zawartych w nich informacji. Pierwszym krokiem w tym procesie jest zdefiniowanie relacji pomiędzy tabelami. Gdy się to zrobi, można tworzyć kwerendy, formularze i raporty pozwalające wyświetlać za jednym razem informacje z różnych tabel.

Charakteryzuje się tym ,że dla każdej instancji jednej z dwóch encji istnieje dokładnie jedna instancja drugiej encji pozostająca z nią w równoważnym związku np. czek i opłata ( opłata jest realizowana za pomocą jednego czeku i za pomocą jedego czeku można zrealizować tylko jedną opłatę).Ten typ relacji spotyka się rzadko, ponieważ większość informacji powiązanych w ten sposób byłoby zawartych w jednej tabeli. Relacji jeden-do-jednego można używać do podziału tabeli z wieloma polami, do odizolowania części tabeli ze względów bezpieczeństwa, albo do przechowania informacji odnoszącej się tylko do podzbioru tabeli głównej. Na przykład, można by utworzyć tabelę do wyszukiwania pracowników uczestniczących w rozgrywkach piłkarskich.









Charakteryzuje się tym ,że dla każdej instancji jednej encji istnieje wiele instancji drugiej encji pozostającej z nią w rozważanym związku. Relacja jeden-do-wielu jest realizowana poprzez utworzenie atrybutu w encji po stronie wiele aby umieścić w nim klucz encji znajdującej się po stronie jeden. Tak utworzony atrybut encji po stronie wiele nosi nazwę klucza obcego ponieważ jest on głównym kluczem w innej tabeli. Relacja jeden-do-wielu jest najbardziej powszechnym typem relacji













      W relacji wiele-do-wielu, rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z tabeli B i tak samo rekord w tabeli B może mieć wiele dopasowanych do niego rekordów z tabeli A. Jest to możliwe tylko przez zdefiniowanie trzeciej tabeli (nazywanej tabelą łącza), której klucz podstawowy składa się z dwóch pól - kluczy obcych z tabel A i B. Relacja wiele-do-wielu jest definiowana jako dwie relacje jeden-do-wielu z trzecią tabelą. Na przykład, tabele "Zamówienia" i "Produkty" są powiązane relacją wiele-do-wielu zdefiniowaną przez utworzenie dwóch relacji jeden-do-wielu z tabelą "Opisy zamówień"












JAK WYKONAC I WYKORZYSTAC RELACJE:

Wykorzystywanie relacji w bazach danych wiąże się z koniecznością usunięcia redundancji (zbędnych powtórzeń), a co za tym idzie zaoszczędzeniem miejsca na dysku oraz ograniczeniem liczby wprowadzanych danych. Ponadto dzięki relacjom unika się wprowadzania błędnych danych. Załóżmy, że chcemy prowadzić bazę danych dla hurtowni. Chcielibyśmy prowadzić ewidencję wszystkich zamówień klientów. Każde zamówienie składa się z pełnego adresu i wszelkich informacji o kliencie oraz towarach, jakie klient zamówił. Łatwo zauważyć, że każdy klient będzie w hurtowni dokonywał wielu zamówień w ciągu pewnego okresu czasu, więc przy każdym zamówieniu musielibyśmy wprowadzać wszystkie dane o kliencie. Najlepiej byłoby stworzyć jedną tabelę "Klient", zawierającą wszystkie dane o kliencie oraz drugą tabelę "Zamówienia", w której znajdowałyby się informacje na temat konkretnego zamówienia. Tabele te muszą być powiązane ze sobą określonym polem. W tym przypadku należy stworzyć dodatkowe pole "ID Klienta" w tabeli "Zamówienia". Pomimo tego, że jednak musimy stworzyć dodatkowe pole w tabeli "Zamówienia", to unikamy wprowadzania wszystkich informacji o kliencie. W przypadku łączenia pól najlepiej jest łączyć tabele kluczem podstawowym (ID), który jest niepowtarzalny, a także zajmuje w bazie tylko 2 bajty. Łączone pola muszą być tego samego typu, więc w tabeli "Zamówienia" pole łączące powinno być liczbą całkowitą długą (taki jest bowiem typ licznika ID). W naszym przypadku tworzymy dwie tabele o polach:
"Klient" – ID Klienta (licznik, klucz podstawowy), Nazwa (tekst, długość 50 znaków), NIP (tekst, 30 znaków), Miasto (tekst, 30 znaków), Ulica (tekst 40 znaków), Kod pocztowy (tekst, długość 6 znaków, maska wprowadzania: 00\-000;0;_), Telefon (tekst, długość 15 znaków, maska wprowadzania: \(999") "0000009;0;_), Faks (tak samo jak telefon), Nazwisko (tekst, długość 30 znaków), Imię (tekst, długość 30 znaków), Info (tekst, długość 255 znaków).
"Zamówienia" – ID Zamówienia (licznik, klucz podstawowy), ID Klienta (liczba całkowita długa – wskaźnik do tabeli "Klient"), Data zamówienia (Data/Godzina, maska wprowadzania: 99\-99\-00;0;_), Towar 1 (tekst), Towar 2 (tekst), Towar 3 (tekst), Towar 4 (tekst), Towar 5 (tekst).
Kolejnym etapem jest utworzenie odpowiedniej relacji. Z menu Edycja należy wybrać Relacje... Zgłosi się okno wyboru tabel do relacji, w którym należy wybrać obydwie tabele klikając przycisk Dodaj, po czym należy zamknąć okno wyboru tabel (rys. 1).
Każda tabela jest widoczna jako oddzielne okienko, w którym znajdują się wszystkie pola w niej występujące (klucz podstawowy jest wyróżniony grubą czcionką). W celu utworzenia relacji, należy kliknąć lewym przyciskiem myszy na pole łączące w jednej tabeli i przytrzymując klawisz myszy najechać kursorem na odpowiadające mu pole łączące w drugiej tabeli. W naszym przypadku należy kliknąć na pole ID Klienta w tabeli "Klient" i przytrzymując klawisz myszy najechać kursorem (o zmienionym kształcie) na pole ID Klienta w tabeli "Zamówienia". Jeżeli powiodła się ta operacja, to pojawi się pole dialogu Relacje (rys. 2):
W polu dialogowym wskazane są pola, z którymi połączone są tabele. Aby nasza relacja miała wymagane przez nas właściwości, to należy zaznaczyć pole "Wymuszaj więzy integralności". Teraz możemy wybrać odpowiedni typ relacji. Ponieważ w naszym przypadku jednemu klientowi może odpowiadać wiele zamówień, to należy wybrać typ relacji Jeden-do-Wielu (polem łączącym w tabeli podstawowej "Klient" musi być pole unikatowe, jak np. licznik ID Klienta w naszym przykładzie). Dodatkowo można wybrać Kaskadowe uaktualnianie powiązanych rekordów – oznacza to, że jeżeli w tabeli podstawowej "Klient" zmieni się wartość pola łączącego (ID Klienta), to zmieni się ona we wszystkich wystąpieniach w tabeli powiązanej "Zamówienia" (ponieważ ID Klienci nie można zmieniać, więc w naszym przypadku nie możemy zaznaczyć tego pola). Kaskadowe usuwanie powiązanych rekordów oznacza, że jeżeli chcielibyśmy usunąć jakiegoś klienta, to wraz z tym usuniemy wszystkie zamówienia dotyczące tego klienta (Access zapyta się, czy usunąć powiązane rekordy). W relacji możemy ustawić także dodatkowe Właściwości połączenia naciskając klawisz "Typ połączenia...."
Do wyboru są trzy opcje (rys. 3):
  1. Uwzględnia tylko wiersze, dla których połączone pola z obu tabel są równe – najczęściej występująca relacja, w której podczas zapytania otrzymuje się zamówienia wraz z odpowiadającymi im klientami.
  2. Uwzględnia WSZYSTKIE rekordy z tabeli "Klient" i tylko te rekordy z tabeli "Zamówienia", dla których związane pola są równe – możemy stworzyć takie zapytanie, które pokazałoby nam wszystkich klientów i odpowiadające im zamówienia. W tej relacji wynikiem zapytania będą także rekordy z tabeli "Klienci", które nie mają żadnych zamówień.
  3. Uwzględnia WSZYSTKIE rekordy z tabeli "Zamówienia" i tylko te rekordy z tabeli "Klient", dla których związane pola są równe – zapytanie utworzone dla tego typu relacji zwróci wszystkie rekordy z tabeli "Zamówienia" i odpowiadające im dane z tabeli "Klient". W przypadku, gdy wymuszone są więzi integralności, to nie możemy wprowadzić rekordu do tabeli "Zamówienia", który nie byłby powiązany z jakimś rekordem z tabeli "Klient". Po utworzeniu relacji w oknie relacji ukaże się odpowiednie powiązanie pomiędzy tabelami "Klient" i "Zamówienia" (rys. 4).
Relacje wykorzystywane są w bazach, które mogą zawierać powtarzające się dane. W naszym przypadku moglibyśmy stworzyć dodatkową tabelę "Produkty" połączoną z tabelą "Zamówienia". Gdy mamy do czynienia z większą bazą danych, to relacji jest dużo więcej.
Spróbujmy wprowadzić przykładowe dane. Początkowo należy wprowadzić klienta i wszystkie dane w tabeli "Klient". Gdy mamy już kilku klientów, to możemy wprowadzać dla nich zamówienia. Pojawia się jednak problem, ponieważ musimy wprowadzić odpowiednią wartość w polu ID Klienta w tabeli "Zamówienia". Każdy klient z tabeli "Klient" ma swój unikatowy numer ID Klienta i po wprowadzeniu odpowiedniego numeru do tabeli "Zamówienia" powodujemy, że Access nie informuje nas o błędzie. Nie tego chyba jednak oczekiwaliśmy, gdyż aby wprowadzić odpowiednie zamówienie, musimy znaleźć lub wprowadzić nowego klienta, zapamiętać jego ID Klienta, a następnie wprowadzić nowe zamówienie, w którym umieścimy odpowiedni numer ID Klienta. Problem ten jest całkowicie wyeliminowany podczas pracy z formularzami, gdzie klienta wybiera się z listy, a odpowiednia wartość ID Klienta zostaje zapisana automatycznie w tabeli "Zamówienia" po wybraniu odpowiedniego klienta z listy. Aby sprawdzić działanie relacji i praktycznie ją wykorzystać, należy stworzyć zapytanie dla obydwu tabel.

Zapytania

Zapytania służą do wybierania konkretnych i interesujących nas rekordów z bazy danych, grupowania ich lub do tworzenia zestawień i podsumowań. Zapytania funkcjonalne mogą zmieniać również określone dane wg. zadanego wzorca (np. zwiększać oprocentowanie dla lokat pieniężnych). Zapytanie tworzy dynamiczny zbiór danych, który możemy oglądać, edytować lub też wykorzystywać jako element wejściowy dla formularzy i raportów lub innych zapytań.
Zapytania w Accessie można tworzyć na dwa sposoby: za pomocą języka SQL (Structured Query Language), bądź też za pomocą siatki QBE (Query By Example) metodą przenieś i upuść. Aby utworzyć nowe zapytanie, należy wejść do okna Bazy Danych, kliknąć przycisk Zapytanie, a następnie przycisk Nowy. Z pola dialogowego, jakie się ukaże, wybierzmy Nowe Zapytanie. Należy wybrać odpowiednie tabele do zapytania i w naszym przykładzie należy wybrać obydwie tabele "Klient" i "Zamówienia" (rys. 5).
Po wybraniu tabel, Access automatycznie pokazał relację między nimi. W zapytaniu można także tworzyć relację, która będzie istniała jedynie podczas wykonywania zapytania, a po zakończeniu działania zapytania relacji nie będzie. Relacje tymczasowe są wykorzystywane do tworzenia bardzo skomplikowanych powiązań pomiędzy polami. Aby nasze zapytanie cokolwiek robiło, to należy wybrać pola do wyświetlania. Może odbywać się to na kilka sposobów: na siatce QBE należy wybrać odpowiednie pole z listy. Wszystkie pola są uszeregowane według tabel. Innym sposobem jest dwukrotne kliknięcie na pole, które chcemy wyświetlić w oknie tabeli. Jeżeli chcemy wyświetlić wszystkie pola z tabeli, to należy wybrać gwiazdkę z okna tabeli lub też dwukrotnie kliknąć na okno tabeli (spowoduje to zaznaczenie wszystkich pól w tabeli), a następnie lewym przyciskiem myszy przytrzymać i przeciągnąć wybrane pola na siatkę QBE. Po wykonaniu zapytania kolejność wyświetlania pól (kolumn) będzie zależała od tego, w jakiej kolejności pojawiają się one na siatce QBE.
Aby przedstawić wyniki naszej relacji, wprowadziłem kilka rekordów do bazy danych. Celowo umieściłem tylko niektóre pola, aby pokazać najważniejszą rzecz – działanie relacji. Przyjrzyjmy się tabelom "Klienci" i "Zamówienia" (rys. 6 i 7).
W zapytaniu należy zaznaczyć następujące pola do wyświetlania: ID Zamówienia, Towar 1, Towar 2, Towar 3, Towar 4, Towar 5, Nazwa, Nazwisko, Imię. Po zapisaniu zapytania, należy je uruchomić (dwukrotnie kliknąć na nazwie zapytania w oknie Bazy danych, rys. 8).

Dodatkowe ustawienia parametrów zapytania
    Dodatkowe ustawienia parametrów zapytania:
  • Sortuj: rosnąco, malejąco, (bez sortowania) – pozwala na uzyskanie porządku alfabetycznego w bazie. Domyślnie rekordy nie są sortowane i wyświetlane są w takim porządku, w jakim występują w bazie.
  • Pokaż – zapełnienie tej kratki powoduje, że pole to pojawi się podczas uruchomienia zapytania.
  • Kryteria – tutaj stawia się warunki (stosuje się filtr na dane). Można korzystać z generatora wyrażeń, zwłaszcza jeśli nasze dane mają spełniać jakiś wzór matematyczny. Jeżeli chcemy wyświetlić pracowników, których pensja przekracza 1000, to należy jako kryteria wpisać >1000.
  • Lub – dodatkowy warunek dotyczący danego pola (np. chcemy wyświetlić pracowników, którzy zarabiają >1000 lub < 500.
 

Jeżeli nazwa pola jest niezbyt znacząca (np. NrPesel), to możemy użyć tzw. aliasów, które pozwalają na zamianę nazwy pola w zapytaniu na inną niż nazwa pola w tabeli wejściowej. Tworzenie aliasu odbywa się przez wpisanie na siatce QBE w nazwie pola nowej nazwy z dwukropkiem poprzedzającej nazwę pola z tabeli wejściowej (rys. 9).
Użycie aliasów powoduje, że można otrzymać bardziej znaczącą nazwę pola wyjściowego po uruchomieniu zapytania. Użycie siatki QBE zacznie ułatwia tworzenie zapytań, jednak w rzeczywistości przechowywane są one w postaci języka SQL. Zapytanie można tworzyć bezpośrednio w oknie SQL lub przełączać się między pracą w oknie SQL a siatką QBE. Opanowanie języka nie jest konieczne do tworzenia dobrych zapytań, gdyż za jej pomocą bardzo łatwo jest tworzyć, jednak pisanie w oknie SQL jest na pewno bardziej efektywne (rys. 10).
Zapytanie wybierające z naszego przykładu w oknie SQL. W zapytaniu wybieramy pola wyświetlania za pomocą SELECT DISTINCTROW, a tabela wejściowa określona jest za pomocą FROM, z tym że tabele "Klient" i "Zamówienia" są połączone relacją (INNER JOIN).
Zapytania są jednym z bardzo ważnych elementów bazy danych, gdyż mogą one zarówno wybierać interesujące nas rekordy, jak również aktualizować dane w bazie.

Rodzaje zapytań w Accessie
  • Zapytanie wybierające – najczęściej występujący (również w naszym przykładzie) typ zapytania. Powoduje on wybranie jakiś rekordów według zadanego wzorca lub kryteriów. Można na przykład wybrać z bazy wszystkich pracowników o nazwisku Kowalski, bądź też wybrać pracowników, których wiek zawiera się w granicach 22-38 lat.
  • Zapytanie krzyżowe – jest podstawą do opracowywania wykresów i podsumowań. Za jego pomocą można tworzyć zestawienia bardzo przydatne do opracowywania wyników i tworzenia strategii przyszłej pracy.
  • Zapytanie tworzące tabele – może utworzyć tabelę na podstawie wyników swojej pracy. W ten sposób można zachować wynik zapytania w bazie i wykorzystać go później (samo zapytanie jest bowiem dynamicznym zbiorem danych, a nie fizycznym).
  • Zapytanie aktualizujące – dzięki temu rodzajowi zapytań możliwa jest zamiana pewnych pól w bazie. Można np. zamienić wszystkich Kowalskich na Abackich, bądź też zmienić wartość oprocentowania kredytów. Oczywiście można dokonywać wyboru rekordów, jakich ma dotyczyć zapytanie.
  • Zapytanie dołączające – dołącza do aktualnej lub innej bazy danych wynik swojego działania (wybierającego lub innego), przy czym wynik zapisywany jest w konkretnej tabeli i można wybrać wzajemne powiązania między dołączanymi polami.
  • Zapytanie usuwające – pozwala usunąć z tabeli rekordów spełniających wybrane kryteria. Między rodzajem zapytań można przełączać się przyciskami na pasku narzędzi. Zanim uruchomi się zapytanie funkcjonalne (dokonujące zmian w naszej bazie: zapytanie tworzące tabelę, aktualizujące, dołączające, usuwające) najlepiej wcześniej stworzyć zapytanie wybierające i sprawdzić, jakich rekordów będzie dotyczyła zmiana, a następnie zamienić je na zapytanie funkcjonalne. Podczas wykonywania zapytania funkcjonalnego Access żąda potwierdzenia, jednak można to wyłączyć w opcjach. Należy wybrać z menu Widok > Opcje i w kategorii Ogólne ustawić dla pola "Potwierdź zapytania funkcjonalne" ustawić wartość Nie.
 

Powrót do strony glownej     Na początek