Przedmioty informatyczne

20. Tworzenie relacyjnych baz danych

Nawet nie korzystając z komputerów mamy do czynienia z bazami danych (świadomie lub nieświadomie). Przykładem bazy danych może być kartka papieru zawierająca dwie tabelki; pierwsza zawiera listę pracowników przedsiębiorstwa wraz z ich danymi personalnymi: imieniem, nazwiskiem, datą urodzenia, adresem zamieszkania, stanowiskiem służbowym, natomiast druga tabelka zawiera listę płac dla tych samych pracowników wraz takimi danymi jak: imieniem, nazwiskiem, kwotami płacy zasadniczej, premii, płacy brutto za miesiąc maj 2004 r:
PRACOWNICY

Imię i nazwisko

Data urodzenia

Adres

Stanowisko

Zenon Adamski

12.09.1960

Sopot ul. Lipowa 10/2

Dyrektor

Zenon Biernacki

01.04.1963

Sopot ul. 23 Marca 23/4

Kierownik brygady

Jerzy Wołoś

09.06.1974

Gdynia ul. Morska 123/6

Murarz-tynkarz

WYNAGRODZENIE ZA M-C MAJ 2004 r.

Imię i nazwisko

Płaca zasadnicza

Premia

Płaca brutto

Zenon Adamski

2000, - zł

300, - zł

2300, - zł

Zenon Biernacki

1500, - zł

100, - zł

1600, - zł

Jerzy Wołoś

800, - zł

50, - zł

850, - zł

Jednak w przypadku dużej ilości informacji lepiej jest przechowywać je w komputerach w postaci bazy danych.
Bazą danych nazywamy zbiór danych w postaci tabel oraz narzędzi stosowanych do gromadzenia, przekształcania oraz wyszukiwania danych.
Tabelą w bazie danych nazywamy zbiór rekordów opisujących obiekty np. pracownicy zawierających informacje o tych obiektach w sposób ujednolicony.
Rekord – pojedynczy wiersz w tabeli.
Polem nazywamy najmniejszą część rekordu, która przechowuje jedną daną.
Relacyjną bazą danych nazywamy bazę danych w postaci tabel połączonych relacjami. Ogólny schemat logiczny bazy danych.

Baza danych składa się z tabel, tabele składają się z rekordów, rekordy składają się z pól. Pola mogą przechowywać elementarne dane, które są niepodzielne, czyli zakładamy, że mniejszych jednostek danych nie ma.
Pojęcia podstawowe
Dana (ang.data) – najmniejsza, elementarna jednostka informacji o obiekcie będąca przedmiotem przetwarzania komputerowego.
Relacyjna baza danych (ang.database) – zbiór danych w postaci tabel połączonych relacjami.
Typ danej (ang. data type) - rodzaj danej, czyli forma zapisu informacji:
  • znakowy (ang.character) – dana może przybierać tylko wartości znaków pisarskich
  • liczbowy (ang.number) – dana może przechowywać tylko liczby
  • logiczny (ang.logical) – dana może przybierać tylko dwie wartości: prawda, fałsz (tak, nie)
  • data (ang.date) – dana może przyjmować postać daty i czasu np. rok.miesiąc.dzień godz:min:sek
  • alfanumeryczny (ang.alphanumeric) – dana może przybierać wartości znaków ASCII oraz cyfry
  • numeryczny (ang.numeric) – wartościami danej mogą być tylko cyfry i znaki: + (plus), - (minus).
  • walutowy (ang.currency) – dana może przyjmować wartości liczbowe razem z symbolem waluty
  • notatnikowy (ang.memo) – dana może być oddzielnym zbiorem tekstowym służącym do przechowywania dowolnych opisów.
  • binarny (ang.binary) – dana może być np. plikiem dźwiękowym lub filmowym.
  • graficzny (ang.graphic) – dana przechowuje grafikę np. rysunki.
  • obiektowy (ang.OLE) – dana przechowuje obiekty do których dostęp dokonuje się za pomocą techniki OLE (ang. object linking and embleding), czyli obiektów tworzonych przez inne aplikacje.
Format danej (ang. data format) – postać wprowadzania i wyświetlania danej np. format 99-999 oznacza, że dana numeryczna może być wyświetlona jako ciąg 2 cyfr, pojedynczej kreski i 3 cyfr. Format ten może służyć do wprowadzani i wyświetlania kodu pocztowego.
Rekord (ang.record) – zwany także krotką lub wierszem, to pozioma struktura danych opisująca jeden obiekt. Rekord składa się z pól opisujących dokładnie cechy obiektu np. pojedynczego pracownika.
Pole (ang. field) – zwane także atrybutem lub kolumną, to struktura danych opisująca pojedynczą daną w rekordzie np. nazwisko pracownika.
Tabela (ang. table) - nazywamy zbiór rekordów opisujących obiekty w sposób ujednolicony tj. każdy rekord posiada te same nazwy pól. Uwaga: w niektórych systemach baza danych np. dBase każda tabela nazywana jest bazą danych i jest przechowywana w oddzielnych plikach.
Klucz podstawowy (ang. primary key) zwany też kluczem głównym to jedno lub więcej pól, których wartość jednoznacznie identyfikuje każdy rekord w tabeli. Taka cecha klucza nazywana jest unikatowością. Klucz podstawowy służy do powiązania rekordów w jednej tabeli z rekordami z innej tabeli. Klucz podstawowy jest nazywany kluczem obcym, jeśli odwołuje się do innej tabeli. Na przykład, w bazie pracowników kluczem podstawowym może być numer ewidencyjny pracownika.
Klucz podstawowy jednopolowy (ang. single primary key) Jeśli istnieje pole zawierające dane unikatowe, jak na przykład numer katalogowy czy numer identyfikacyjny, można je zadeklarować jako klucz podstawowy. Jeśli jednak w polu tym powtarzają się wartości, klucz podstawowy nie zostanie ustawiony. Aby znaleźć rekordy zawierające te same dane, należy usunąć rekordy o powtarzających się wartościach bądź zdefiniować wielopolowy klucz. podstawowy.
Klucz podstawowy wielopolowy zwany też kluczem złożonym (ang.composed key) W sytuacji, gdy żadne z pól nie gwarantuje unikatowości wartości w nim zawartych, należy rozważyć możliwość utworzenia klucza podstawowego złożonego z kilku pól.
Relacja (ang.relation) Po podzieleniu danych na tabele i zdefiniowaniu pól kluczy podstawowych trzeba wprowadzić do systemu bazy danych informacje na temat sposobu poprawnego łączenia powiązanych danych w logiczną całość. W tym celu definiuje się relacje między tabelami.
Typy relacji (ang.relation types):
1. relacja jeden-do-jednego
W relacji jeden-do-jednego każdy rekord w tabeli A może mieć tylko jeden dopasowany rekord z tabeli B, i tak samo każdy rekord w tabeli B może mieć tylko jeden dopasowany rekord z tabeli A. 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.
2. Relacja jeden-do-wielu
Relacja jeden-do-wielu jest najbardziej powszechnym typem relacji. W relacji jeden-do-wielu rekord w tabeli A może mieć wiele dopasowanych do niego rekordów z tabeli B, ale rekord w tabeli B ma tylko jeden dopasowany rekord w tabeli A.
3. Relacja wiele-do-wielu
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 w istocie dwiema relacjami 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ń”.

Relacje umożliwiają:
  • Określenie więzów integralności między tabelami
  • Automatyczne tworzenie połączenia w kwerendach w celu otrzymania spójnej informacji z większej liczby tabel
  • Synchronizację wyświetlania formularzy i sprzęgniętych z nimi podformularzy
  • Tworzenie zestawień w postaci raportów z podraportami
Ustalenie relacji jest możliwe, gdy spełnione są warunki:
  • Obie tabele muszą należeć do tej samej bazy danych Access'a lub muszą być przyłączone do tej samej bazy
  • Powiązane pola muszą mieć ten sam typ danych i powinny zawierać takie same wartości
  • W przypadku wymuszania więzów integralności pole (pola) w tabeli nadrzędnej muszą tworzyć klucz podstawowy lub musi być na nich określony unikatowy indeks.
Podsumowanie: TYPY RELACJI
Jeden-do-jednego (1-1) występuje, gdy dla jednego rekordu w tabeli A istnieje, co najwyżej jeden pasujący rekord w tabeli B i odwrotnie.
Jeden-do-wielu (1- ∞) występuje, gdy dla rekordu w tabeli A istnieje więcej niż jeden pasujący rekord w tabeli B, ale dla rekordu w tabeli B istnieje, co najwyżej jeden pasujący rekord w tabeli A.
Wiele-do-wielu (∞ - ∞) występuje, gdy rekordowi w tabeli A odpowiada więcej niż jeden rekord w tabeli B i rekordowi w tabeli B odpowiada więcej niż jeden rekord w tabeli A. Bezpośrednia realizacja połączeń (∞ - ∞) nie jest poprawna, a w przypadku wymuszenia więzów integralności nie jest możliwa. Połączenia tego typu realizuje się poprzez zastąpienie ich dwoma połączeniami 1- ∞ z wykorzystaniem dodatkowej tabeli.
Tabela po stronie jeden (1) relacji jest nazywana tabelą nadrzędną, po stronie wiele (∞) tabelą podrzędną.
Wymuszenie więzów integralności pociąga za sobą konsekwencje:
  • Gdy do tabeli podrzędnej jest wstawiany nowy rekord z określoną wartością klucza, to rekord z taką wartością klucza musi istnieć w tabeli nadrzędnej
  • Nie można usunąć rekordu z tabeli nadrzędnej, jeśli w tabeli podrzędnej istnieją odpowiadające mu rekordy, chyba że jest ustawiona opcja Kaskadowe usuwanie powiązanych rekordów
  • W tabeli nadrzędnej nie można zmieniać w rekordzie wartości klucza podstawowego, jeśli w tabeli podrzędnej istnieją rekordy z taką samą wartością powiązanego z tym kluczem pola, chyba, że jest ustawiona opcja Kaskadowe aktualizowanie powiązanych pól.
    Kaskadowe usuwanie powiązanych rekordów - przy usuwaniu rekordu z tabeli nadrzędnej automatycznie są usuwane wszystkie powiązane rekordy tabeli podrzędnej.
    Kaskadowe aktualizowanie powiązanych pól - przy zmianie wartości klucza podstawowego w tabeli nadrzędnej automatycznie są aktualizowane klucze zewnętrzne we wszystkich powiązanych rekordach z tabeli podrzędnej.
    Są trzy typy sprzężeń:
    • Uwzględnienie tylko rekordów, dla których połączone pola z obu tabel są równe
    • Uwzględnienie wszystkich rekordów z tabeli nadrzędnej i tylko tych z podrzędnej, dla których istnieje powiązany z nimi rekord w tabeli nadrzędnej
    • Uwzględnienie wszystkich rekordów z tabeli podrzędnej i tylko tych z tabeli nadrzędnej, dla których istnieje powiązany z nimi rekord w tabeli podrzędnej.
    Sortowanie (ang.sorting)
    Sortowaniem rekordów nazywamy ich porządkowanie według jakiegoś kryterium. Kryterium to nazwa lub nazwy pól według których odbywa się sortowanie. Przykładowo może być to sortowanie rosnące (sortuje wartości w porządku rosnącym (od A do Z, od 0 do 9) lub sortowanie malejące (sortuje wartości w porządku malejącym od Z do A, od 9 do 0).
    Zapytanie (ang.query)
    Zapytanie, czyli kwerenda to taka konstrukcja językowa, która pozwala na wyszukiwanie danych z bazy danych za pomocą zadawania pytań. Może to być specjalna konstrukcja języka programowania lub okno graficzne w którym należy podać parametry poszukiwanych danych. W zaawansowanych systemach baz danych kwerend można używać także do wyświetlania, zmiany i analizy danych.
    Kwerenda wybierająca jest najczęściej używanym rodzajem kwerendy. Służy do otrzymywania danych z tabeli lub tabel i wyświetlania wyników w arkuszu danych, w którym można je następnie przeglądać. Kwerendy wybierające mogą być również używane do grupowania rekordów i obliczania sum, zliczeń, wyliczania średnich i przeprowadzania innych obliczeń.
    Filtr (ang. filter)
    Filtr pozwala na wyszukiwanie rekordów spełniające pojedyncze kryterium lub wiele kryteriów albo sortować rekordy w porządku rosnącym lub malejącym.
    Formularz (ang. screen form)
    Formularz, czyli tzw. formatka ekranowa służy do wygodnego wprowadzania, edytowania i usuwania danych w tabeli. Wymienione operacje wykonuje się za pomocą okna, w którym użytkownik obsługuje pola. Znaczenie pól opisane jest za pomocą etykiet, czyli nazw pól.
    Raport (ang.report)
    Raportem nazywamy konstrukcję systemu bazy danych, która służy do definiowania postaci i zawartości danych pobieranych z tabel, a następnie umieszczanych na wydruku.
    Procedura (ang.procedure)
    Procedurą nazywamy serię poleceń zapisaną w języku programowania baz danych, służącą do wykonywania obsługi na elementach bazy: tabelach, formularzach, raportach, kwerendach.
    Makro (ang. macro)
    Ciąg akcji wykonywanych na tabelach, formularzach, raportach, kwerendach uruchamianych przyciskami umieszczonymi w oknie np. formularza lub gdy wystąpi jakieś zdarzenie np. kasowanie rekordu.
    Moduł (ang.module)
    Moduł to podprogram w systemie bazy danych, który wykonuje wiele funkcji użytkowych powiązanych ze sobą tematycznie np. obsługa danych personalnych pracowników lub obliczanie kwot wypłat albo wydruk listy płac. Funkcje te umieszcza się zwykle w menu głównym aplikacji służącej do przetwarzania danych. W niektórych bazach danych aplikacja ta jest nazywana programem wykonawczym bazy (ang. run-time system).
    System zarządzający bazami (ang.database management system)
    Jest to program zarządzający (system bazy danych) bazami danych oraz służący do wykonywania tabel, formularzy, kwerend, raportów, makr, procedur, podprogramów oraz produkcji gotowych aplikacji. Najpopularniejsze systemy zarządzania relacyjnymi bazami danych dla komputerów klasy IBM PC to: Access, Dbase, Delphi, FoxPro, Informix, Paradox.
    Program wykonawczy bazy (ang.run-time system)
    Gotowa aplikacja bazy danych w postaci pliku(ów ) typu EXE sprzedawana użytkownikowi w celu dostarczenia mu systemu (zbioru programów) za pomocą którego może on przetwarzać swoje dane bez konieczności znajomości podstaw baz danych.

    Zadanie
    W ramach ćwiczenia zostanie utworzona prosta baza danych zawierająca trzy tabele klienci, towary i sprzedaż, jak na rysunku poniżej

    W bazie można przechowywać dane rejestrujące sprzedaż dowolnych towarów. Baza danych tworzona jest na potrzeby ćwiczenia, jest prosta i nie rozwiązuje wielu problemów pojawiających sie podczas rejestracji sprzedaży np. zmienności ceny towaru.
    Utworzenie pustej bazy danych
    • Uruchom program MS Access.
    • Utwórz pustą bazę danych o dowolnej nazwie.
    • Zapisz bazę danych.
    Utworzenie tabeli klienci
    Zaprojektowanie tabeli polega na zdefiniowaniu kolumn, które będzie zawierała. MS Access umożliwia projektowanie tabel w widoku projektu poprzez nazwanie kolumn (w nomenklaturze Accessa pól), wybranie typu danych kolumn i określenie kolumny klucza głównego (podstawowego).
    Na stronie Tabele otwórz projekt nowej tabeli (ikona Nowy).
    Zaprojektuj tabelę o następujących kolumnach:
    • id_klienta - typ danych Autonumer - klucz główny (podstawowy),
    • nazwisko,
    • imię,
    • inne informacje o kliencie, które uznasz za stosowne np. adres, PESEL itp..
    Zapisz tabelę pod nazwą klienci.
    Utworzenie tabeli towary
    Na stronie Tabele otwórz projekt nowej tabeli.
    Zaprojektuj tabelę o następujących kolumnach:
    • id_towaru - typ danych Autonumer - klucz główny (podstawowy),
    • nazwa_towaru,
    • cena - typ danych Walutowy,
    • inne informacje o towarze, które uznasz za stosowne.
    Zapisz tabelę pod nazwą towary.
    Utworzenie tabeli sprzedaż
    Na stronie Tabele otwórz projekt nowej tabeli.
    Zaprojektuj tabelę o następujących kolumnach:
    • nr_transakcji - typ danych Autonumer - klucz główny (podstawowy),
    • id_klienta - klucz obcy - klienci(id_klienta), do utworzenia odnośnika do tabeli klienci posłuż się kreatorem odnośników, wybierz id_klienta, nazwisko, imię,
    • id_towaru - klucz obcy - towary(id_towaru), do utworzenia odnośnika do tabeli towary posłuż się kreatorem odnośników, wybierz id_towaru, nazwa_towaru,
    • ilość - typ danych liczba, pojedyncza precyzja,
    • data - typ danych Data/Godzina, format: data krótka, maska wprowadzania: data krótka, wartość domyślna: Date(),
    • inne informacje o sprzedaży, które uznasz za stosowne.
    Zapisz tabelę pod nazwą sprzedaż.
    Wymuszenie więzów integralności referencyjnej
    Kliknij ikonę Relacje i zapoznaj się z relacjami utworzonymi podczas projektowania tabel. Jeśli na wykresie nie widać wszystkich tabel, kliknij w oknie Relacje prawym klawiszem myszki i wybierz z menu kontekstowego Pokaż wszystko.
    Zmodyfikuj relacje wymuszając więzy integralności.
    Aby zmodyfikować relację należy dwukrotnie na nią kliknąć - otworzy się okno Edytowanie relacji.
    Zapisz zmiany.
    Wprowadzanie danych do tabel
    Na stronie Tabele otwórz kolejno tabele towary, klienci, sprzedaż i wprowadź do nich przykładowe dane.
    Tworzenie formularza przy pomocy kreatora formularzy
    • Na stronie Formularze kliknij Nowy.
    • W oknie Nowy formularz wybierz Kreator formularzy i tabelę klienci jako źródło danych.
    • Wybierz wszystkie pola (kolumny), następnie akceptuj wszystkie podpowiedzi kreatora.
    • Po przejściu do końca utworzysz nowy formularz.
    • Zapisz formularz.
    • Otwórz formularz, obejrzyj wprowadzone już dane, następnie wprowadź nowe dane.
    • Utwórz formularze dla tabel towary i sprzedaż.
    • Posługując się nowo utworzonymi formularzami wprowadź do tabel towary i sprzedaż nowe dane
    Tworzenie formularza z podformularzem
    Przy pomocy kreatora formularzy utwórz formularz transakcje pobierający dane z tabel klienci i sprzedaż:
    • otwórz kreatora formularzy,
    • jako źródło danych wybierz wszystkie dostępne pola (kolumny) z tabel klienci i sprzedaż,
    • na pytanie W jaki sposób dane mają być wyświetlane? daj dwa razy dwie różne dostępne odpowiedzi,
    • na pytanie Jaki ma być układ podformularza? odpowiedz tabelaryczny,
    Otwórz nowo utworzony formularz, zapoznaj się z jego wyglądem i możliwościami modyfikowania i wprowadzania danych.
    Otwórz formularz w widoku projektu, dopracuj formularz i podformularz graficznie.
    Z podformularza usuń kontrolkę id_klienta.
    Modyfikacja formularzy
    Otwórz utworzone formularze w widoku projektu i dopracuj ich wygląd.
    Otwórz zmodyfikowane formularze.
    Tworzenie kwerendy zawierającej informacje o transakcjach
    Kwerendy (zapytania) są poleceniami języka SQL. Podstawowe typy kwerend to kwerenda wybierająca, dołączająca, aktualizująca i usuwająca. Kwerendy w Accessie można tworzyć przy pomocy interfejsu graficznego, poprzez przeciąganie odpowiednich pól z tabel do formularza kwerendy.
    Na stronie Kwerendy otwórz projekt nowej kwerendy.
    Dodaj do kwerendy, jako źródło danych, tabele klienci, towary i sprzedaż.
    Zamknij okno Pokazywanie tabeli.
    Dodaj, przeciągając myszką z tabel do siatki kwerendy, następujące dane:
    • sprzedaż.nr_transakcji,
    • klienci.nazwisko,
    • klienci.imie,
    • towary.nazwa_towaru,
    • sprzedaż.ilość,
    • towary.cena.
    Zapisz kwerendę pod nazwą transakcje.
    Otwórz kwerendę i zinterpretuj uzyskane wyniki.
    Tworzenie raportów
    Przy pomocy kreatora raportów utwórz raporty zawierające:
    • zestawienie zakupów dokonanych poprzez poszczególnych klientów,
    • zestawienie ilość sprzedanych towarów i klientów, którzy je kupili,
    • zestawienie wszystkich transakcji.
    Obejrzyj raporty w widoku wydruku i projektu.
    Zmodyfikuj projekty raportów.