Temat B1. Tworzenie relacyjnej bazy danych na przykładzie systemu obsługi wypożyczalni filmów

przez | 18 sierpnia 2021

Wszystkie treści na stronie ir.migra.pl są chronione prawami autorskimi. Więcej informacji znajdziesz tutaj.

Uwaga: Zapoznaj się wcześniej z tematami B1-B3 z podręcznika „Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres podstawowy. Klasa III”. Wykonaj zawarte w nich ćwiczenia i zadania.

Zapisy podstawy programowej realizowane w temacie:

II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.

Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

4) przygotowując opracowania rozwiązań złożonych problemów, posługuje się wybranymi aplikacjami w stopniu zaawansowanym:

d) projektuje i tworzy relacyjną bazę złożoną z wielu tabel oraz sieciową aplikację bazodanową dla danych związanych z rozwiązywanym problemem, formułuje kwerendy, tworzy i modyfikuje formularze oraz raporty, stosuje język SQL do wyszukiwania informacji w bazie i do jej modyfikacji, uwzględnia kwestie integralności danych, bezpieczeństwa i ochrony danych w bazie,

Spis treści

  1. Pojęcia związane z bazami danych – przypomnienie i rozszerzenie
    1. Baza danych i system zarządzania bazą danych
    2. Klucz i indeks
    3. Typy relacji
  2. Określenie wymagań systemu obsługi wypożyczalni filmów
  3. Ustalenie zbiorów informacji
  4. Przygotowanie tabeli klientów
  5. Przygotowanie tabeli filmów
  6. Wybrane własności pól
    1. Typy danych
    2. Rozmiar pola
  7. Przygotowanie tabeli wypożyczeń
  8. Definiowanie relacji
  9. Definiowanie klucza złożonego

1. Pojęcia związane z bazami danych – przypomnienie i rozszerzenie

1.1. Baza danych i system zarządzania bazą danych

Baza danych (ang. database) to zbiór danych, czyli odpowiednio zorganizowanych informacji, który można przetwarzać za pomocą programów komputerowych.

Pojęcie baza danych oznacza zbiór danych gromadzonych w komputerze w celu ich przetwarzania. Często tym terminem określamy również oprogramowanie do tworzenia baz danych i przetwarzania danych, np. Microsoft Access, MySQL, Oracle, PostgreSQL, Sybase. Stosowanie tego pojęcia w takim kontekście to pewne uproszczenie. W literaturze informatycznej wyodrębnia się określenie system zarządzania bazą danych.

System zarządzania bazą danych (w skrócie SZBD, ang. RDBMS, Relational Database Management System) to oprogramowanie, które umożliwia utworzenie i utrzymywanie relacyjnej bazy danych oraz wykonywanie operacji związanych z przetwarzaniem i udostępnianiem danych.

Do tworzenia baz danych w kolejnych tematach będziemy wykorzystywać program Microsoft Access. Na jego przykładzie wskażemy ogólne zasady przetwarzania danych, które można stosować w różnych systemach zarządzania bazami danych. Opiszemy też kilka możliwości charakterystycznych tylko dla programu Microsoft Access.

Musimy pamiętać, że bazy danych, które tworzymy na lekcjach informatyki, nie są w pełni profesjonalne. Składają się z kilku tabel, a ich możliwości są ograniczone. Profesjonalne bazy danych zbudowane są ze znacznie większej liczby tabel. Mają bardziej skomplikowane powiązania między tabelami, a proces tworzenia takiego systemu wymaga bardzo dobrego przygotowania teoretycznego (zdobytego np. na studiach informatycznych) i dokładnego przeanalizowania warunków funkcjonowania systemu.

1.2. Klucz i indeks

Przykład 1. Przedstawienie realizacji relacji między klientami a ich zamówieniami

Właściciel hurtowni owoców TRUSKAWKA zlecił projektantowi utworzenie bazy danych, która umożliwi wprowadzanie informacji o dostawcach i klientach, o owocach oferowanych na sprzedaż oraz transakcjach kupna i sprzedaży owoców.

W bazie danych potrzebne są następujące zbiory informacji: o klientach (nazwa lub nazwisko i imię, adres, numer telefonu), dostawcach (nazwa lub nazwisko i imię, adres, numer telefonu), owocach (nazwa, gatunek, cena za kilogram), transakcjach kupna (nazwa dostawcy, nazwa owocu, liczba kilogramów, kwota transakcji, data kupna), transakcjach sprzedaży (nazwa klienta, nazwa owocu, liczba kilogramów, kwota transakcji, data sprzedaży).

Klienci hurtowni TRUSKAWKA składają zamówienia na różne owoce. Projektant bazy danych powinien tak zaplanować tabele, a w nich pola, aby można było sprawnie wyszukać, jakie zamówienia złożyli poszczególni klienci. W przykładowych tabelach celowo ograniczyliśmy liczbę kolumn.

Można łatwo odszukać, jakie zamówienia składał Kowalski. Zamówienia tego klienta mają liczbę 4 w polu IdKlienta, w tabeli Zamowienia.

Wartości pola IdKlienta muszą być unikalne w ramach tabeli, aby pole to mogło służyć do zdefiniowania relacji między tabelami Klienci i Zamowienia. Takie pole nazywamy kluczem unikalnym. Zauważmy, że gdyby Adamska w polu IdKlienta miała również wpisany numer 4, to w tabeli Zamowienia nie byłoby wiadomo, czyje są dane zamówienia – Adamskiej czy Kowalskiego.

Rys. 1. Tabela Klienci
Rys. 2. Tabela Zamowienia
Aby w programie Microsoft Access zdefiniować relację między daną tabelą a inną, jedno pole tej tabeli musi pełnić funkcję klucza podstawowego, natomiast w drugiej tabeli należy wyznaczyć pole do zapisywania wartości tego klucza.
Funkcję klucza podstawowego może pełnić tylko takie pole, którego wartości są unikalne (niepowtarzalne) w ramach tabeli.
Klucz podstawowy jednoznacznie identyfikuje rekord.

W rekordzie o polach <Numer, Nazwisko, Imie, Ulica, Miejscowosc, KodPocztowy, NrTelefonu, Pesel> kluczem może być np. pole Numer, Nazwisko, Imie, Miejscowosc, Pesel lub złożenie kilku pól, np. Nazwisko i Imie.

Programy do tworzenia baz danych zazwyczaj mają narzędzia do kontrolowania wartości pola klucza unikalnego.

Bardzo ważny jest wybór właściwych pól klucza unikalnego. Dlaczego nazwisko nie może być takim kluczem? Otóż wartości pola Nazwisko nie są unikalne – wiele osób może mieć to samo nazwisko. Jak już wspomnieliśmy, kluczem może być pole lub złożenie pól. Jednak i ten wybór należy starannie przemyśleć, gdyż nawet złożenie pól Nazwisko i Imie nie daje gwarancji niepowtarzalności.

W życiu codziennym wiele informacji wyszukujemy, korzystając z indeksów (zwanych też skorowidzami, katalogami). Np. w bibliotece używamy katalogu autorów, tytułów i rzeczowego. Każdy z nich zawiera odsyłacze – informacje, gdzie można znaleźć książkę. Ta sama książka pojawia się w katalogach tyle razy, ile jest rodzajów katalogów, tylko w każdym z nich pod inną pozycją. W katalogu alfabetycznym autorów może być na początku, a w katalogu tytułów – na końcu. Mimo że ta sama książka występuje w kilku indeksach, to w rzeczywistości jest umieszczona tylko w jednym miejscu na półce regału bibliotecznego.

Podobnie jest z rekordami w tabeli – każdy jest zapisany w jednym miejscu, natomiast indeksy zawierają odsyłacze do miejsca tabeli, w którym dany rekord jest fizycznie umieszczony. Indeksy stosuje się do przyspieszania wyszukiwania informacji w bazie danych.

Indeks zawiera odsyłacze do rekordów tabeli. Kojarzy wartość wybranego pola (pól) z położeniem rekordu w tej tabeli i ułatwia jego odnajdywanie.

Na przykład, gdy dla pola Nazwisko wartością jest „Kowalski”, to indeks oparty na polu Nazwisko ułatwi nam szybkie wyszukanie fizycznego położenia rekordu z nazwiskiem „Kowalski”. Jeśli jest kilka osób o takim samym nazwisku, to zostaną wyszukane wszystkie rekordy z zadaną wartością pola.

Indeks ustala wirtualną kolejność rekordów zgodnie z porządkiem zadanego pola (pól), czyli kolejność, w jakiej następujące po sobie wartości pola zwiększają się lub zmniejszają (w przypadku pól liczbowych) albo rosną lub maleją w sensie alfabetycznym (w przypadku pól tekstowych).

1.3. Typy relacji

Wyróżniamy trzy typy relacji:

  • „jeden do wielu”,
  • „jeden do jednego”,
  • „wiele do wielu”.
Relacja „jeden do wielu” występuje wtedy, gdy rekord z pierwszej tabeli (tu: Konie) powiązano z wieloma rekordami z drugiej tabeli. Natomiast rekord z drugiej tabeli (tu: Wyścigi) powiązano tylko z jednym rekordem z pierwszej.

W bazie Stadnina występuje relacja „jeden do wielu”. Dany koń bierze udział w kilku wyścigach, a informacja o jednym wyścigu dotyczy tylko jednego konia. Jest to najczęściej występujący typ relacji.

Rys. 3. Schemat relacji „jeden do wielu”. Każdy prostokąt oznacza oddzielny rekord, np. rekord tabeli Konie o numerze konia równym 5 jest powiązany z trzema rekordami tabeli wyścigów (koń wziął udział w trzech wyścigach)

Ćwiczenie 1. Sprawdzamy relacje użyte w przykładowej bazie danych

  1. Otwórz plik TB1_c1_Stadnina.mdb (tabele zawierają fikcyjne dane).
  2. Sprawdź, jaką relacją połączono tabele tej bazy i wyjaśnij w każdym przypadku, dlaczego użyto danej relacji.
Relacja „jeden do jednego” występuje wtedy, gdy rekord z pierwszej tabeli (tu: Dostawcy) powiązano z nie więcej niż jednym rekordem z drugiej tabeli (tu: Adresy) i odwrotnie – rekord z drugiej tabeli powiązano z nie więcej niż jednym rekordem z pierwszej.
Uwaga: Nie wszystkie rekordy z pierwszej tabeli muszą być powiązane z rekordami z drugiej tabeli.

Przykład 2. Relacja „jeden do jednego”

W bazie danych hurtowni TRUSKAWKA rozdzielono szczegółowe dane o dostawcach, bowiem niektórzy dostawcy posługują się dwoma adresami (stałym i do korespondencji). W tabeli Dostawcy zapisano adres stały, a w oddzielnej tabeli Adresy – adres do korespondencji. Jeśli nie dotyczy to wielu dostawców, warto te adresy przechowywać oddzielnie. Gdyby pola dotyczące adresu do korespondencji umieszczono w tabeli Dostawcy, w znacznej części rekordów tej tabeli pola pozostałyby niewypełnione.

Rys. 4. Schemat relacji „jeden do jednego”

Ćwiczenie 2. Sprawdzamy relacje użyte w przykładowej bazie danych

  1. Otwórz plik TB1_c2_Hurtownia.mdb (tabele zawierają fikcyjne dane).
  2. Sprawdź, jakimi relacjami połączono tabele tej bazy i wyjaśnij w każdym przypadku, dlaczego użyto danej relacji.
Relacja „wiele do wielu” występuje wtedy, gdy rekord z pierwszej tabeli powiązano z wieloma rekordami z drugiej tabeli i rekord z drugiej tabeli powiązano z wieloma rekordami z pierwszej.

Przykład 3. Relacja „wiele do wielu”

Rozpatrzmy związek między uczniami i nauczycielami w szkolnej bazie danych. Każdy nauczyciel uczy wielu uczniów. Z drugiej strony – każdy uczeń ma wielu nauczycieli.

2. Określenie wymagań systemu obsługi wypożyczalni filmów

W kolejnych tematach utworzymy prosty system obsługi wypożyczalni filmów, który nazwiemy SOWy (System Obsługi Wypożyczalni).

Będziemy go projektować według schematu przygotowania prostej relacyjnej bazy danych pokazanego w temacie B1 na rysunku 2. („Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres podstawowy. Klasa III”). Początkowo celem projektu będzie utworzenie prostej bazy danych oraz przedstawienie efektu przetwarzania danych. W dalszych tematach będziemy bazę uzupełniać i modyfikować, m.in. dodając nowe formularze, kwerendy, raporty.

System SOW-y może nam posłużyć jako wzór do tworzenia podobnych systemów, np. systemu obsługi wypożyczalni samochodów, żaglówek, książek.

W praktyce projektuje się zazwyczaj od razu cały system – wszystkie jego elementy: tabele, kwerendy, formularze, raporty. Mimo przeprowadzenia pełnej analizy systemu informacyjnego, rzadko jednak udaje się uniknąć modyfikacji gotowego systemu. Na przykład okazuje się, że nie przewidziano następującej sytuacji: klient przychodzi do wypożyczalni dwa razy tego samego dnia; za pierwszym razem wypożycza trzy filmy na trzy dni, a za drugim razem oddaje jeden z nich i wypożycza kolejny. Podobnych sytuacji może pojawić się wiele, dlatego tak ważna jest współpraca projektanta systemu ze zleceniodawcą i jego przyszłymi użytkownikami, czyli w tym wypadku właścicielem i pracownikami wypożyczalni filmów.

Załóżmy, że zleceniodawca chce szybko ocenić jakość naszej pracy i sprawdzić, czy przygotowany system spełni jego oczekiwania. Zleca zatem wykonanie niedużego fragmentu systemu.

Projektowany przez nas system ma zapewnić możliwość wprowadzania danych nowego filmu, nowego klienta oraz ewidencjonowania wypożyczonych filmów, czyli dostarczać odpowiedzi na pytanie: jakie filmy zostały wypożyczone przez konkretnych klientów?

Przykład 4. Początkowe wymagania i ograniczenia systemu SOWy

Wymagania

  1. Wprowadzanie informacji o filmie.
  2. Wprowadzanie informacji o kliencie.
  3. Wprowadzanie informacji o wypożyczeniu filmu.
  4. Uzyskiwanie informacji, które filmy zostały wypożyczone przez konkretnych klientów.
  5. Drukowanie raportu na temat filmów wypożyczonych przez konkretnych klientów.

Ograniczenia

  1. Dany film może być wypożyczony w danym dniu przez danego klienta tylko jeden raz.
  2. Nie prowadzimy ewidencji opłat.
  3. Nie prowadzimy w systemie ewidencji nośników z filmami, czyli magazynu – pracownik wypożyczalni po prostu sprawdza, czy nośnik z filmem jest na półce.

3. Ustalenie zbiorów informacji

Planujemy trzy formularze:

  • wprowadzania danych nowego klienta (imię, nazwisko, adres, numer telefonu, numer dokumentu stwierdzającego tożsamość – dla uproszczenia przyjmujemy na razie, że jest to numer dowodu osobistego),
  • wprowadzania nowego filmu (tytuł i gatunek filmu, rodzaj nośnika),
  • wypożyczenia filmu (daty wypożyczenia i zwrotu, liczba dni, na które wypożyczono film).

Zleceniodawca chciałby mieć możliwość drukowania listy wypożyczonych filmów. Zaprojektujemy w tym celu odpowiedni raport. Powinien on zawierać informacje o kliencie (jego nazwisko i imię) oraz informacje o filmach, które wypożyczył (tytuł filmu, datę wypożyczenia, datę zwrotu i liczbę dni, na które wypożyczono film).

Uwzględniając wymagania systemu oraz zaplanowane formularze i raporty, dzielimy informacje, które powinny być wprowadzane bądź wyprowadzane, na trzy grupy.

Przykład 5. Podział informacji na grupy

Informacje o klientachInformacje o filmachInformacje o wypożyczeniach
NazwiskoTytuł filmuData wypożyczenia  
ImięRodzaj nośnikaLiczba dni
Ulica i nr domuGatunek filmuData zwrotu
Kod pocztowy  
Miejscowość  
Numer telefonu  
Numer dowodu osobistego  

Ćwiczenie 3. Rysujemy wstępny projekt raportu

  1. Przeanalizuj wzór wstępnego projektu raportu w temacie B1 na rysunku 5. („Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres podstawowy. Klasa III”).
  2. Narysuj wstępny projekt raportu o wypożyczeniach filmów.

4. Przygotowanie tabeli klientów

Tabela klientów będzie pierwszym obiektem naszego systemu. Po uruchomieniu programu Microsoft Access wybieramy tworzenie nowej, pustej bazy danych. Program zapyta o nazwę pliku, w którym będzie ona przechowywana.

W programie Microsoft Access wszystkie obiekty bazy danych (tabele, zapytania, formularze, raporty) oraz wszystkie dane wprowadzone do tabel są zapisywane w jednym pliku.

Mimo że bazę zapisujemy w jednym pliku pod określoną nazwą, to dla poszczególnych obiektów bazy wprowadzamy oddzielne nazwy, np. dla tabeli, zapytania, formularza, raportu. W naszych przykładach przyjmujemy, że w nazwach tabel i pól oraz kwerend, raportów i formularzy nie stosuje się polskich znaków diakrytycznych i odstępów oraz każdy wyraz nazwy rozpoczyna się wielką literą (zgodnie z zasadą ujednolicenia nazewnictwa).

Ze wstępnego podziału informacji otrzymujemy trzy kategorie tematyczne pól, z których tworzymy tabele o nazwach: Klienci, Filmy, Wypozyczenia.

Rys. 5. Okno tworzenia nowego obiektu bazy lub otwierania już utworzonego obiektu w programie Microsoft Access

Wartości pola klucza podstawowego mogą być wprowadzane automatycznie przez program. W tym celu należy zdefiniować pole typu Autonumerowanie. Każdy rekord będzie miał wówczas jednoznacznie przydzielony numer – kolejną liczbę naturalną.

Wartości klucza podstawowego mogą być również wprowadzane przez użytkownika systemu, ale wówczas pole musi mieć inny typ niż Autonumerowanie.

Program Microsoft Access ma wbudowane narzędzia do kontrolowania wartości pola klucza unikalnego. Gdy będziemy wprowadzać nowy rekord, program automatycznie sprawdzi, czy nie istnieją rekordy z taką samą wartością klucza podstawowego.

Przykład 6. Tabela Klienci

Tabelę Klienci tworzymy w Widoku projektu. Do tabeli wprowadzamy odpowiednio pola: Nazwisko, Imie, UlicaNr, KodPocztowy, Miejscowosc, NrTelefonu, NrDowoduOs (rys. 6.).

Dla każdego pola pozostawiamy domyślny tekstowy typ danych – Krótki tekst.

Dodatkowe pole, które musimy umieścić w tabeli Klienci, to pole klucza podstawowego.

Uwaga: Zależnie od wersji programu Microsoft Access, program może domyślnie wstawić (jako pierwsze) pole klucza podstawowego typu Autonumerowanie, nadając mu domyślną nazwę, np. Identyfikator, lub przy próbie zamykania okna tabeli wyświetlić okno z komunikatem o braku zdefiniowanego klucza podstawowego (jeśli nie zdefiniowaliśmy go wcześniej).

Rys. 6. Okno nowej tabeli (w Widoku projektu) z wpisanymi polami dotyczącymi danych klienta

Ćwiczenie 4. Tworzymy tabelę Klienci

  1. Utwórz nowy plik bazy danych w programie Microsoft Access. Nazwij go SOWy.
  2. Dodaj nową tabelę (w Widoku projektu). Zapisz tabelę pod nazwą Klienci.
  3. Zdefiniuj pole klucza podstawowego typu Autonumerowanie. Zmień domyślną nazwę pola, nadaną przez program, na Id.
  4. Wprowadź pola podane w przykładzie 6. Dla wszystkich pól pozostaw domyślny typ danych (Tekst).
Jeśli rezygnujemy z automatycznego przypisywania wartości polu klucza, możemy wprowadzać do niego własne wartości, które, będą identyfikowały dany rekord, a tym samym umieszczane w nim informacje.

W tabeli Klienci klucz podstawowy, poza jednoznaczną identyfikacją rekordu, jest nam potrzebny do zdefiniowania relacji między tą tabelą a innymi tabelami. Wartości tego klucza nie będą służyły do wyszukiwania klientów w gotowym systemie.

Chcemy, aby klient nie musiał pamiętać numeru, pod którym jest zapisany w bazie. Poszczególne osoby będziemy wyszukiwali według nazwiska lub nazwiska i imienia, ewentualnie (w przypadku kilku klientów o takim samym nazwisku i imieniu) – według numeru dowodu osobistego.

W istniejących systemach obsługi wypożyczalni filmów klient ma zazwyczaj przydzielany specjalny numer identyfikacyjny, który podaje, wypożyczając film. Jednak gdy poda tylko nazwisko, ewentualnie dodatkowe dane, także może skorzystać z wypożyczalni. W naszym systemie nie będziemy stosować numerów identyfikacyjnych, które klienci musieliby zapamiętywać.

W tabeli Klienci utworzymy dodatkowy indeks na podstawie pól Nazwisko i Imie.

Przyjęliśmy, że klienta będziemy wyszukiwać przede wszystkim według nazwiska i imienia. Taki dodatkowy indeks może przyspieszyć wykonywanie operacji wyszukiwania klienta dla dużej liczby danych.

Pierwszy indeks został utworzony automatycznie, gdy zdefiniowaliśmy klucz podstawowy.

Klucz główny powinien mieć indeks, a więc program Microsoft Access taki indeks zakłada i nadaje mu nazwę PrimaryKey (rys. 7.).

Przykład 7. Tworzenie indeksu w tabeli Klienci

Otwieramy tabelę w Widoku projektu. Aby utworzyć indeks, należy otworzyć okno Indeksy (przycisk Indeksy na karcie Projektowanie w Narzędziach tabel).

Następnie należy wpisać nazwę indeksu (tu: NazwiskoImie), wybrać pola klucza (tu: Nazwisko i Imie) oraz porządek sortowania (tu: rosnący). Wszystkie właściwości tego indeksu ustawiamy na Nie (rys. 7.).

Rys. 7. Okno programu Microsoft Access, w którym widoczne są indeksy tabeli

Ćwiczenie 5. Tworzymy indeks w tabeli Klienci

  1. Korzystając z przykładu 7., w tabeli Klienci utwórz indeks oparty na dwóch polach: Nazwisko i Imie.
  2. Sprawdź, jakie właściwości indeksu PrimaryKey zostały ustalone.

5. Przygotowanie tabeli filmów

W tabeli Klienci jako klucz podstawowy przyjęliśmy klucz oparty na polu typu Autonumerowanie, zaproponowany przez program Microsoft Access. Stwierdziliśmy, że nie będziemy wykorzystywać tego klucza do wyszukiwania klientów. W tabeli Filmy przyjmiemy inne rozwiązanie.

Posługiwanie się kluczem automatycznym w trakcie użytkowania systemu nie jest zbyt wygodne. Właściciel lub pracownik wypożyczalni musieliby pamiętać numer wstawiany automatycznie przez program dla każdego filmu. Dlatego w tabeli Filmy wartości pola klucza podstawowego będzie wprowadzał użytkownik systemu. Definiujemy w ten sposób klucz własny.

Użytkownik, wprowadzając do tabeli nowy film, będzie wpisywał w polu identyfikatora ustalony przez siebie kod filmu. Na przykład taki, w którym pierwsza litera będzie oznaczać gatunek filmu (F – fantastyka, B – bajka, K – komedia, S – film sensacyjny), kolejna – film polski lub zagraniczny (P lub Z), a następne znaki – informacje według własnego uznania, np. początkowe litery tytułu. Zapis wartości tego klucza powinien być łatwy do przyswojenia dla pracowników wypożyczalni, którzy będą używali tego kodu w celu wyszukania określonego filmu. Posługiwanie się pełnym tytułem filmu mogłoby być niejednoznaczne, ponieważ nie zawsze pamiętamy dokładnie brzmienie tytułu lub możemy go błędnie zapisać.

Przykład 8. Tabela Filmy

Po otwarciu nowej tabeli w bazie SOWy wprowadzamy pola:

Id,

TytulFilmu,

RodzajNosnika,

GatunekFilmu.

Dla wszystkich pól ustalamy typ Tekst, także dla pola Id, które definiujemy jako klucz podstawowy.

Uwagi:

  • Jeśli program Microsoft Access domyślnie wstawi pole klucza podstawowego o nazwie Identyfikator i nada mu typ Autonumerowanie, należy zmienić nazwę pola na Id, a typ pola na Krótki tekst.
  • Warto zwrócić uwagę, że w tabelach Klienci i Filmy pole klucza podstawowego nazwaliśmy tak samo – Id. Nazwy pól w różnych tabelach mogą być takie same.
Rys. 8. Tabela Filmy

Ćwiczenie 6. Tworzymy tabelę Klienci

  1. Utwórz tabelę filmów według opisu przedstawionego w przykładzie 8.
  2. Zapisz tabelę pod nazwą Filmy.

6. Wybrane własności pól

6.1. Typy danych

Program Microsoft Access domyślnie przypisuje polom tekstowy typ danych (Krótki tekst lub Długi tekst). W praktyce większość gromadzonych danych jest typu tekstowego. Jeśli wartościami w kolumnie będą ciągi znaków (litery, cyfry, nawiasy oraz inne znaki), to przypisuje się jej typ tekstowy. Można oczywiście, zależnie od potrzeb, wybrać inny typ, np. Liczba, Data/Godzina, Obiekt OLE (do przechowywania np. rysunków), Hiperłącze. Listę standardowych typów danych można zobaczyć na rysunku 5.

Dla każdego pola tabeli należy wybrać typ danych odpowiadający przeznaczeniu pola.

Polom o określonym typie danych można przypisać różne właściwości (rys. 9.), np. określić format danych, rozmiar pola, maskę wprowadzania danych, wartości domyślne.

W kolejnych tematach omówimy stosowanie różnych typów danych i określanie przydatnych właściwości pól.

Dla typu danych można zastosować odpowiedni format danych. Określenie formatu danych nie zmienia danych w tabeli, określa tylko sposób wprowadzania lub wyprowadzania danych.

W programie Microsoft Access dla danych typu liczbowego można ustalić np. format standardowy, stałoprzecinkowy, wykładniczy, procentowy.

Pracując w arkuszu kalkulacyjnym, wprowadzaliśmy formaty dla danych typu liczbowego. Często spotykanym rodzajem danych jest data. Można pozostawić dla daty typ tekstowy, który umożliwia zapisywanie daty w dowolnej postaci. Jednak zadeklarowanie daty jako Data/Godzina umożliwi wykonywanie operacji arytmetycznych na datach, na przykład będzie można obliczyć, ile dni upłynęło od wypożyczenia danego filmu (przez odjęcie daty wypożyczenia od daty bieżącej). Typ Data/Godzina będziemy ustalać dla niektórych pól w tabeli wypożyczeń i filmów.

Rys. 9. Wybór typu danych z listy wyboru. W zakładce Ogólne można ustalić właściwości pola wybranego typu (tu tekstowego pola Nazwisko)

6.2. Rozmiar pola

Rozmiar pola określa maksymalną liczbę znaków, które można do niego wprowadzić. Ustalenie rozmiaru może wpływać także na ilość pamięci potrzebnej do przechowywania wartości pola. Choć przy małych systemach obszar zajmowanej pamięci nie jest tak istotny, to przy ogromnej liczbie danych może wpływać na szybkość działania bazy, np. na wyszukiwanie danych. W programie Microsoft Access rozmiar pola określa się dla danych typu Krótki tekst i Liczba. Dla danych typu Krótki tekst maksymalnie może to być 255 znaków. Dla danych typu Liczba w opcji Rozmiar pola określamy zakres i typ liczb wprowadzanych do pola, np. Liczba całkowita, Podwójna precyzja.

Oczywiście, niektóre systemy zarządzania bazami danych mogą mieć wbudowane mechanizmy dbające o optymalizację ilości miejsca zajmowanego przez dane, niezależnie od ustalonego rozmiaru pola. Przyjmiemy jednak zasadę samodzielnego dbania o rozmiary pól. Powinniśmy m.in. zastanowić się, z ilu liter będą się składać najdłuższe możliwe: nazwisko (trzeba uwzględnić nazwiska dwuczłonowe), imię, nazwa ulicy, nazwa miejscowości (również bywają dwuczłonowe) w tabeli Klienci oraz najdłuższy tytuł filmu w tabeli Filmy.

Ćwiczenie 7. Ustalamy rozmiary pól tekstowych

  1. W tabeli Klienci ustal rozmiary dla następujących pól tekstowych: Nazwisko, Imie, UlicaNr, a w tabeli Filmy: TytulFilmu, GatunekFilmu, RodzajNosnika.
  2. Wspólnie z koleżankami i kolegami przedyskutuj rozmiary tych pól.

Wskazówka: Gatunek filmu to np. komedia, bajka, film sensacyjny, fantastyka, film przygodowy.

7. Przygotowanie tabeli wypożyczeń

W tabelach Klienci i Filmy zdefiniowaliśmy klucze podstawowe. Natomiast w tabeli Wypozyczenia zaplanujemy pola o nazwach: IdKlienta i IdFilmu. W tych polach, podczas dopisywania nowego rekordu, czyli realizacji wypożyczenia filmu, będą odpowiednio zapisywane wartości identyfikatora klienta (Id z tabeli Klienci) oraz wartości identyfikatora filmu (Id z tabeli Filmy). Przez pola Id w tabeli Klienci i IdKlienta w tabeli Wypozyczenia oraz przez pola Id w tabeli Filmy i IdFilmu w tabeli Wypozyczenia tabele te będą połączone relacją.

W tabeli Wypozyczenia pola IdKlienta i IdFilmu nazywamy (m.in. w programie Microsoft Access) kluczami obcymi, ponieważ identyfikują rekordy z obcych tabel (tu z tabel Klienci i Filmy), a nie z tabeli, w której są umieszczone.

Przykład 9. Tabela Wypozyczenia

Po otwarciu nowej tabeli w bazie SOWy wprowadzamy pola w podanej kolejności, ustalając typy danych:

IdFilmu Krótki tekst,

DataWypozyczenia Data/Godzina,

IdKlienta Liczba,

LiczbaDni Liczba,

DataZwrotu Data/Godzina.

Uwaga: W tabeli nie definiujemy jeszcze kluczy podstawowych. Jeśli program domyślnie wstawi pole klucza podstawowego o nazwie Identyfikator, należy je usunąć. W tym celu należy ustawić kursor na tym polu i z paska narzędzi wybrać przycisk ze znakiem kluczyka.

Rys. 10. Tabela Wypozyczenia

Aby pole klucza podstawowego i odpowiadające mu pole klucza obcego zostały powiązane relacją, pola muszą być tego samego typu. Jeśli określilibyśmy różne typy danych dla tych pól, to program Microsoft Access uniemożliwiłby nam zdefiniowanie relacji między takimi tabelami. Dlatego dla pola IdKlienta należy ustalić typ liczbowy, a dla IdFilmu pozostawiamy typ tekstowy.

Pole IdKlienta nie może być zadeklarowane jako Autonumerowanie (pamiętamy, że taki typ ma pole Id w tabeli Klienci), ponieważ wtedy pola w tabelach numerowałyby się niezależnie. W konsekwencji odpowiadające sobie rekordy mogłyby mieć różne identyfikatory.

Ćwiczenie 8. Tworzymy tabelę Wypożyczenia

  1. Utwórz tabelę Wypozyczenia, wprowadzając pola i określając ich typy podane w przykładzie 9. Na razie nie definiuj w tabeli żadnego klucza podstawowego.
  2. Umieść wszystkie pola w takiej samej kolejności jak na rysunku 6. (taka kolejność będzie wygodna do definiowania kluczy podstawowych w kolejnym ćwiczeniu).

8. Definiowanie relacji

Z przeprowadzonej analizy systemu informacyjnego wynikają następujące związki:

  • jeden klient może wypożyczyć wiele filmów i jedna transakcja wypożyczenia dotyczy jednego klienta,
  • jeden film może być wypożyczony wiele razy i jedna transakcja wypożyczenia dotyczy jednego filmu.

Planując relacje, uwzględniamy informacje, które chcemy uzyskiwać z bazy danych. Tutaj są to informacje m.in. o filmach, które zostały wypożyczone przez konkretnych klientów.

Przygotowaliśmy już niezbędne tabele oraz zdefiniowaliśmy potrzebne klucze. Połączymy relacją „jeden do wielu” tabelę Klienci z tabelą Wypozyczenia oraz tabelę Filmy z tabelą Wypozyczenia.

Przykład 10. Definiowanie relacji

Korzystamy z wbudowanych narzędzi programu Microsoft Access, które pozwalają na zdefiniowanie relacji w postaci graficznej, jako linii łączących poszczególne tabele.

Wybieramy polecenie Relacje (na karcie Narzędzia bazy danych). W otwartym oknie Relacje wybieramy tabele, które chcemy połączyć relacją (rys. 11.).

Aby otworzyć okno edytowania relacji (rys. 12.), wystarczy „przeciągnąć” pole klucza Id z tabeli Filmy na odpowiadające mu pole klucza IdFilmu. Można również kliknąć przycisk Edytuj relacje.

W oknie Edytowanie relacji należy zaznaczyć opcję Wymuszaj więzy integralności.

Rys. 11. Relacje typu „jeden do wielu” łączą tabelę Klienci z tabelą Wypozyczenia oraz tabelę Filmy z tabelą Wypozyczenia
Rys. 12. W oknie edytowania relacji można wybrać odpowiednie tabele, a w nich odpowiadające sobie pola kluczy
Wymuszanie więzów integralności oznacza, że w polu „klucza obcego” (tu: IdKlienta i IdFilmu) nie można wprowadzić wartości nieistniejących w polu klucza podstawowego tabeli, z której prowadzimy połączenie (tu odpowiednio: z tabel Klienci i Filmy).

W tabeli Wypozyczenia nie ma więc możliwości dopisania rekordu dla klienta, który nie figuruje w tabeli podstawowej Klienci. Oznacza to, że nie można wypożyczyć filmu osobie, której danych nie zarejestrowano w tabeli podstawowej.

Podobnie zaznaczenie wymuszenia więzów integralności podczas tworzenia relacji między tabelami Wypozyczenia i Filmy oznacza, że w tabeli Wypozyczenia nie może być odwołania do filmu, którego nie ma w tabeli Filmy.

Ćwiczenie 9. Tworzymy relacje między tabelami

9. Definiowanie klucza złożonego

  1. Utwórz relacje między tabelami bazy SOWy zgodnie z opisem podanym w przykładzie 10.
  2. Zapisz plik pod tą samą nazwą.

Aby zdefiniować relacje między tabelami, niezbędne było zdefiniowanie kluczy podstawowych w tabelach Klienci i Filmy oraz dodanie pól kluczy obcych do tabeli Wypozyczenia.

Natomiast w celu zdefiniowania relacji nie jest wymagane definiowanie klucza podstawowego w tabeli Wypozyczenia. Jest ono potrzebne do identyfikacji rekordów w bazie.

Należy wrócić do ustalonych wymagań i ograniczeń naszego systemu. Założyliśmy, że dany film może być wypożyczony przez danego klienta tylko jeden raz w ciągu danego dnia.

Zanim wskażemy dane pole (pola) jako klucz podstawowy, powinniśmy dobrze zastanowić się nad skutkami przetwarzania danych (tu: wypożyczenia filmu) w różnych przypadkach. Wypożyczenie filmu to dopisanie nowego rekordu do tabeli Wypozyczenia.

Przykład 11. Definiowanie klucza złożonego

Rozpatrzmy kilka przypadków ustalania kluczy podstawowych (pamiętamy, że klucz podstawowy jest unikalny, co oznacza, że w tabeli może istnieć tylko jeden rekord z konkretną wartością klucza podstawowego).

Aby zdefiniować wybrane pole jako klucz podstawowy, należy ustawić kursor na tym polu, a następnie z paska narzędzi wybrać przycisk ze znakiem kluczyka. Obok nazwy pola pojawi się odpowiednie oznaczenie. Powtórne kliknięcie tego przycisku usuwa oznaczenie klucza podstawowego.

1. Gdyby pole IdFilmu było kluczem podstawowym, to dany film mógłby zostać wypożyczony tylko raz (potem nikt nie mógłby go już wypożyczyć). Nie byłoby możliwe dopisanie do tabeli Wypozyczenia rekordów o takim samym identyfikatorze IdFilmu. Oznacza to, że ani klient o identyfikatorze 2, ani o identyfikatorze 5 nie mogliby już wypożyczyć filmu KP084, niezależnie od terminu (rys. 13.).

Rys. 13. IdFilmu jest kluczem podstawowym. Skreślono rekordy, które nie mogą być dopisane do bazy

2. Gdyby pole IdKlienta było kluczem podstawowym, to dany klient (tu o numerze 3) mógłby wypożyczyć tylko jeden film. Nie mógłby już wypożyczyć filmu FZ086 ani SP015, niezależnie od terminu (rys. 14.).

Rys. 14. IdKlienta jest kluczem podstawowym. Skreślono rekordy, które nie mogą być dopisane do bazy

3. Gdyby pola IdFilmu i IdKlienta zdefiniować jako klucz podstawowy złożony, to dany klient (tu o numerze 3) mógłby wypożyczyć dany film (tu o numerze KP084) tylko jeden raz. Nie można byłoby wprowadzić do tabeli Wypozyczenia nowego rekordu, dla którego wartość pary wskazanych pól byłaby taka sama (rys. 15.).

Rys. 15. IdFilmu i IdKlienta tworzą klucz podstawowy złożony. Skreślono rekordy, które nie mogą być dopisane do bazy

4. Zdefiniowanie pól IdFilmu i DataWypozyczenia jako klucza podstawowego złożonego powoduje, że dany film może zostać wypożyczony w ciągu jednego dnia tylko jeden raz. Klienci o numerach 2 i 5 nie wypożyczą filmu KP084 10 listopada, ale mogą go wypożyczyć w innym dniu (rys. 16.).

Rys. 16. DataWypozyczenia i IdKlienta tworzą klucz podstawowy złożony. Skreślono rekordy, które nie mogą być dopisane do bazy

5. Zdefiniowanie IdKlienta, IdFilmu i DataWypozyczenia jako klucza podstawowego złożonego z trzech pól powoduje, że dany film w ciągu jednego dnia może zostać wypożyczony przez danego klienta tylko jeden raz. Takie założenia przyjęliśmy. Klient o numerze identyfikacyjnym 3 nie może 10 lipca wypożyczyć ponownie filmu KP084. Podobnie klient o numerze identyfikacyjnym 4 10 września nie może wypożyczyć ponownie filmu RZ085 (rys. 17.).

Rys. 17. IdKlienta, IdFilmu i DataWypozyczenia tworzą klucz podstawowy złożony. Skreślono rekordy, które nie mogą być dopisane do bazy

Ćwiczenie 10. Definiujemy klucz złożony

  1. W tabeli Wypozyczenia zrealizuj przypadek 5. z przykładu 11.
  2. Zdefiniuj klucz podstawowy złożony z podanych w przykładzie trzech pól.

Wskazówka: Należy zaznaczyć kursorem myszy równocześnie trzy wiersze z potrzebnymi polami i wybrać z paska narzędzi kluczyk. Znak kluczyka powinien pojawić się przy tych trzech polach.

Zadania

  1. Zaproponuj ciekawy sposób wprowadzania kodu filmu (wartości klucza własnego – pole Id w tabeli Filmy).
  2. Zastanów się, jakie dodatkowe informacje o filmie i kliencie można wprowadzić do bazy. Zaplanuj nazwy pól i typy danych.
  3. Omów wszystkie przypadki wyboru klucza złożonego (przykład 8.).  W zeszycie lub na tablicy zapisz po dwa rekordy do każdej z tabel pokazanych na rysunkach 9-13, które mogą być do nich dopisane.
  4. Na przykładzie utworzonej w tym temacie bazy danych zaprojektuj system obsługi wypożyczalni samochodów – SOWyS. Ustal wstępne wymagania. Zaplanuj odpowiednie pola i przygotuj tabele. Zdefiniuj potrzebne klucze oraz zaproponuj powiązania między tabelami.
  5. Dla zainteresowanych
  6. Na przykładzie utworzonej w tym temacie bazy danych zaprojektuj system obsługi biblioteki w sanatorium – SOBiS. Ustal wstępne wymagania. Zaplanuj odpowiednie pola i przygotuj tabele. Zdefiniuj potrzebne klucze oraz zaproponuj powiązania między tabelami.