Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Dzielenie i łączenie

Już wiesz

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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 ProduktyZamowienia 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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Połączenie tabel ProduktyZamowienia 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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

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

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:

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

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