Przeczytaj
Dzielenie i łączenie
Projekt relacyjnej bazy danych rozpoczynamy od analizy problemu – wycinka rzeczywistości, który baza danych ma odzwierciedlać. Wyodrębniamy w jej trakcie encjeencje, które następnie przekształcamy w ich instancje – w relacyjnych bazach danych są to tabele.
Np. aplikacja służąca do rejestrowania pomiarów treningowych w klubie fitness mogłaby działać w oparciu o następujące dwie tabele:
tabela Zawodnicy:

ID_ZAWODNIKA | NICK | IMIE | NAZWISKO | |
|---|---|---|---|---|
1 | ZosiaJ23 | Zofia | Nowakowska | zosia1@email.pl |
2 | MaciekA007 | Maciej | Kowalski | maciek9@email.pl |
3 | Alex302 | Aleksander | Lewandowski | alexlew@email.pl |
4 | MaciekD008 | Maciej | Wiśniewski | maciek5@email.pl |
tabela Pomiary:
![Ilustracja przedstawia tabelę pomiarów. W pierwszej kolumnie w nagłówku znajduje się: ID_Pomiaru a pod nim dane liczbowe. W drugiej kolumnie w nagłówku znajduje się: Data pomiaru a pod nim daty. W trzeciej kolumnie w nagłówku znajduje się: Czas a pod nim wypisane są czasy. W czwartej kolumnie w nagłówku znajduje się: Dystans [m] a pod nim wartości liczbowe. W piątej kolumnie w nagłówku znajduje się: kilokalorie a pod nim wartości liczbowe.](https://static.zpe.gov.pl/portal/f/res-minimized/R3RaofSRUUdYL/1646033126/23OqyIhvYS673MyjxN2JK4l0hIdUXcMc.jpg)
ID_POMIARU | DATA POMIARU | CZAS | DYSTANS [m] | KILOKALORIE |
|---|---|---|---|---|
1 | 2020‑04‑13 | 22:15:00 | 7481,6 | 197 |
2 | 2020‑04‑14 | 21:36:22 | 7363,1 | 192 |
3 | 2020‑04‑15 | 19:47:28 | 7211,5 | 187 |
4 | 2020‑04‑16 | 20:16:17 | 7317,6 | 189 |
5 | 2020‑04‑17 | 21:14:07 | 7348,9 | 194 |
6 | 2020‑04‑18 | 19:26:52 | 7205,6 | 186 |
7 | 2020‑04‑19 | 20:26:52 | 7322,1 | 190 |
8 | 2020‑04‑20 | 21:26:52 | 7358,7 | 194 |
9 | 2020‑04‑21 | 22:26:52 | 7532,2 | 195 |
10 | 2020‑04‑22 | 23:26:52 | 7548,6 | 199 |
W celu połączenia obu tabel wykorzystujemy klucz podstawowy z tabeli Zawodnicy, traktując go jako tzw. klucz obcy w tabeli Pomiary:
![Ilustracja przedstawia tabelę pomiarów z dołączoną kolumną ID_ZAWODNIKA z tabeli Zawodnicy. W pierwszej kolumnie w nagłówku znajduje się: ID_Pomiaru a pod nim dane liczbowe. W drugiej kolumnie w nagłówku znajduje się: Data pomiaru a pod nim daty. W trzeciej kolumnie w nagłówku znajduje się: Czas a pod nim wypisane są czasy. W czwartej kolumnie w nagłówku znajduje się: Dystans [m] a pod nim wartości liczbowe. W piątej kolumnie w nagłówku znajduje się: kilokalorie a pod nim wartości liczbowe. W szóstej kolumnie, która zaznaczona jest czerwonym prostokątem w nagłówku znajduje się: ID_Zawodnika a pod nim wartości liczbowe.](https://static.zpe.gov.pl/portal/f/res-minimized/RdbHgAVa4kXh6/1646033126/2aWl088cwJ1JbwRgGfpo0PNwug5hAMc0.png)
Dzięki takiemu zabiegowi każdy pomiar będzie jednoznacznie przypisany do konkretnego zawodnika. Relacja łącząca obie tabele jest typu „jeden do wielu”, ponieważ jeden zawodnik może mieć odnotowanych wiele różnych pomiarów, natomiast konkretny pomiar dotyczy tylko jednego zawodnika.
W systemie zarządzania bazą danych relacja ta będzie oznaczona w następujący sposób:

Poznana relacja „jeden do wielu” jest najczęściej występującym, lecz nie jedynym typem powiązania występującym w praktycznych zastosowaniach relacyjnych baz danych.
Relacja typu „wiele do wielu”
W materiale Budowa relacyjnej bazy danych, etap IBudowa relacyjnej bazy danych, etap I przedstawiony został przykład bazy danych wykorzystywanej do obsługi sklepu z produktami pszczelimi rodziców Tomka. Baza ta składała się z trzech tabel – Klienci, Zamowienia oraz Produkty:

Dla uproszczenia przyjęto, że konkretne zamówienie może dotyczyć tylko jednego produktu. Dzięki takiemu założeniu można było ustanowić relację „jeden do wielu” między tabelami Zamowienia oraz Produkty, ponieważ określony produkt może co prawda występować w wielu różnych zamówieniach, ale konkretne zamówienie może dotyczyć tylko jednego produktu.
Takie uproszczenie jest jednak sporym ograniczeniem dla sklepu oraz dużą niedogodnością dla klientów, którzy często dokonują zamówień obejmujących więcej niż jeden produkt. W celu dostosowania systemu obsługi sklepu do opisanej sytuacji musimy zmienić typ relacji występującej między tabelami Produkty i Zamowienia z „jeden do wielu” na „wiele do wielu”„wiele do wielu”. Relację taką realizujemy poprzez zdefiniowanie dodatkowej tabeli (zwanej tabelą pośrednią, łączącą lub tabelą skrzyżowań), składającej się z kluczy podstawowych dwóch łączonych tabel:

Połączenie tabel Produkty i Zamowienia relacją „wiele do wielu” jest realizowane za pomocą dwóch powiązań typu „jeden do wielu” oraz jednej tabeli pośredniej.
W celu zachowania poprawności obsługi zamówień powinniśmy dokonać kilku poprawek:
w tabeli Zamowienia pozbywamy się pola Produkt, ponieważ informacje o produktach dotyczących danego zamówienia będą pochodziły z tabeli Pozycje_zamowienia,
pole LiczbaSztuk przenosimy z tabeli Zamowienia do tabeli Pozycje_zamowienia.
Po korektach struktura bazy danych będzie wyglądała następująco:

W praktycznych realizacjach bazodanowych najczęściej spotykamy się z relacjami typu „jeden do wielu” oraz „wiele do wielu”.
Relacja typu „jeden do jednego”
Dane osobowe przechowywane w bazie danych powinny podlegać szczególnej ochronie. Dodatkowo, biorąc pod uwagę plan rozbudowy sklepu w kierunku możliwości dokonywania zakupów poprzez stronę internetową, w sklepie rodziców Tomka pojawiła się potrzeba bezpiecznego przechowywania loginów oraz haseł logowania do kont klientów. I chociaż hasła będą przechowywane w postaci niejawnej (poprzez zastosowanie szyfrowania lub hashowania), należy zrobić wszystko, aby wzmocnić poziom ochrony tych danych.
Gdyby tabelę Klienci uzupełnić o pola login i hasło, przybrałaby ona następującą postać:

Ze względów bezpieczeństwa wyizolujmy część danych do osobnej tabeli o nazwie Klienci_ochrona. Uzyskamy w ten sposób następujące dwie tabele:

Zależność między danymi przechowywanymi w obu tabelach jest taka, że każdemu rekordowirekordowi z tabeli Klienci_ochrona odpowiada dokładnie jeden rekord z tabeli Klienci oraz każdemu rekordowi z tabeli Klienci odpowiada dokładnie jeden rekord z tabeli Klienci_ochrona. Jest to zależność typu „jeden do jednego”„jeden do jednego”. Elementem wspólnym obu tabel jest ich klucz podstawowy, a więc pole IdKlienta:

Nawiązanie relacji typu „jeden do jednego” w programie Microsoft Access przedstawiono w filmie:

Film dostępny pod adresem /preview/resource/Rq14t3AXerMIU
Film nawiązujący do treści materiału: Tworzenie relacji typu „jeden do jednego” w programie Microsoft Access.
Nawiązanie relacji typu „jeden do jednego” w programie LibreOffice Base przedstawiono w filmie:

Film dostępny pod adresem /preview/resource/R1Xb6qePXj67k
Film nawiązujący do treści materiału: Tworzenie relacji typu „jeden do jednego” w programie LibreOffice Base.
Relacja typu „jeden do jednego” jest najrzadziej występującym typem powiązania w relacyjnych bazach danych. Jest ona wykorzystywana w celu:
poprawienia efektywności dostępu do danych poprzez podział tabeli z wieloma kolumnami na dwie lub więcej tabel o mniejszej liczbie kolumn,
zwiększenia bezpieczeństwa danych szczególnie istotnych poprzez ich odizolowanie w osobnej tabeli,
wydzielenia danych krótkotrwałych, które można wówczas łatwiej usunąć, gdy już nie są potrzebne.
Słownik
(ang. entity) schematyczny opis rzeczywistych lub wymyślonych obiektów posiadających te same cechy, zwane atrybutami lub własnościami
w kontekście relacyjnej bazy danych to jeden wiersz tabeli, zawiera wartości wszystkich pól; rekordem nazywa się również wiersze uzyskiwane w wynikach zapytań, każdy taki wiersz zawiera wartości z pól wskazanych w zapytaniu
typ relacji w bazie danych polegający na tym, że jeden rekord w tabeli A ma dokładnie jeden odpowiadający mu rekord w tabeli B oraz konkretny rekord z tabeli B również posiada tylko jeden pasujący rekord z tabeli A
typ relacji w bazie danych polegający na tym, że jeden rekord w tabeli A może mieć wiele odpowiadających rekordów w tabeli B oraz konkretny rekord z tabeli B może mieć również wiele pasujących rekordów z tabeli A, np. na jeden produkt może być złożonych wiele zamówień, natomiast konkretne zamówienie może dotyczyć wielu różnych produktów