Projekt relacyjnej bazy danych rozpoczynamy od analizy problemu – wycinka rzeczywistości, który baza danych ma odzwierciedlać. Wyodrębniamy w jej trakcie encjeencjaencje, 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:
RTbOnDDcgHxX0
ID_ZAWODNIKA
NICK
IMIE
NAZWISKO
EMAIL
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:
R3RaofSRUUdYL
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:
RdbHgAVa4kXh6
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:
R1XTqveTWALoe
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 IPzZgiSZUxBudowa 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:
R5FAHcJaTVLj2
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”relacja „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:
RAewRflRay2mf
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:
RciFla3ygpDtQ
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ć:
R1KWVd3EWfoNe
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:
R1NekSs5QnyEd
Zależność między danymi przechowywanymi w obu tabelach jest taka, że każdemu rekordowirekordrekordowi 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 jednegorelacja „jeden do jednego”jeden do jednego”. Elementem wspólnym obu tabel jest ich klucz podstawowy, a więc pole IdKlienta:
R1HW6sdfTFF0R
Nawiązanie relacji typu „jeden do jednego” w programie Microsoft Access przedstawiono w filmie:
Rq14t3AXerMIU
Nawiązanie relacji typu „jeden do jednego” w programie LibreOffice Base przedstawiono w filmie:
R1Xb6qePXj67k
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
encja
encja
(ang. entity) schematyczny opis rzeczywistych lub wymyślonych obiektów posiadających te same cechy, zwane atrybutami lub własnościami
rekord
rekord
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
relacja „jeden do jednego”
relacja „jeden do jednego”
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
relacja „wiele do wielu”
relacja „wiele do wielu”
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