Polskie słowo 'relacja’, w tłumaczeniach, często zastępuje angielskie 'relation’ jak i 'relationship’. Ile razy zastanawiasz się czy tym razem dotyczy tabeli czy może relacji dwóch tabel?
W angielskim jest wyraźne rozgraniczenie. Relation to tabela, a relationship to powiązanie pomiędzy dwoma tabelami. Czy da się podobnie rozgraniczyć znaczenia w języku polskim?
Znaczenie 'relation’
Wpisując słowa 'relation’ i 'relationship’ w słownik angielsko-polski i czytając definicje, w obu przypadkach w oczy rzuca się popularne polskie tłumaczenie: 'relacja’. Na drugim miejscu jest słowo 'związek’. No i bądź tu mądry i wybierz właściwe. W potocznym języku polskim oba wyrazy używane są zamiennie.
Dopiero zerkając na definicję matematyczną można zauważyć, że relacja to podzbiór, którego elementy mogą współdzielić pewne własności.
Poruszając się w kontekście relacyjnych baz danych – teorii relacyjnej – słowem 'relation’ określany jest byt znany w bazach danych pod nazwą tabela. Tabela grupuje zestaw atrybutów czyli cech jakie powinny mieć dane aby znaleźć się w bazie danych.
Na atrybut składa się jego nazwa i zakres możliwych wartości. W bazach danych znane pod nazwą kolumny i typu.
Na przykład, chcąc przechowywać w bazie danych dane dotyczące kursów SQL muszę określić jakie cechy tych danych są dla mnie istotne. Co potrzebuję wiedzieć o kursach?
Dla mnie istotna jest nazwa kursu i jego cena. Nazwa kursu będzie określana łańcuchem znaków, a cena liczbą. To są typy moich danych. Wstawiam do bazy danych informacje o dwóch kursach:
'Kurs SQL dla użytkowników - od podstaw', 999zł
'Kurs SQL dla twórców - od podstaw', 999zł
W jakim związku ze sobą są te informacje? W jakiej relacji?
W żadnej!
Są to dwie zupełnie niezależne informacje, których nie ma potrzeby łączyć ze sobą. Nie przyniesie to żadnej korzyści. Nie pozostają ze sobą w żadnym związku.
Gdy poszukasz tłumaczenia słowa 'relation’ i przeczytasz definicję do końca. Znajdziesz tam słówko 'krewny’. To polskie słowo, wg mnie, lepiej opisuje wzajemny stosunek moich dwóch rekordów.
Moje dwa rekordy są spokrewnione ze sobą. Należą do tej samej rodziny rekordów. Mają podobne cechy. Choć inne wartości tych cech. Ale każda wartość cechy jest z tego samego zakresu. Zupełnie jak wśród krewniaków. Co jest także zgodne definicją matematyczną – współdzielą własności.
Jest to dobrze wytłumaczone w słowniku Merriam-Webster. Definicja słowa 'relation’:
’as being of the same kind’ uważam za kluczowe sformułowanie. To jest właśnie to co robi relacja czyli tabela – gwarantuje Ci, że wszystkie wstawiane przez nią dane będą miały ten sam zestaw cech. Choć ich różne wartości. Ale zawsze z tego samego zakresu.
W szczególnych przypadkach niektórych wartości może brakować. Niemniej zakres braku jest znany. Jest określony typem cechy. Będziesz wiedzieć czy brakuje łańcucha znaków czy liczby.
Dopiero zestawy takich spowinaconych danych mogą być ze sobą w relacji. W potocznym rozumieniu tego słowa. Czyli 'relationship’.
Znaczenie 'relationship’
Podobnie określa to, w definicji słowa 'relationship’, słownik Merriam-Webster. Najbardziej trafia do mnie:
a state of affairs existing between those having relations or dealings
Tym różni się język SQL , bazujący na modelu relacyjnym, od zwykłych języków programowania. W modelu relacyjnym nie ma powiązanych ze sobą struktur danych. To dane są ze sobą powiązane.
Możesz wiązać ze sobą tylko dwa zestawy danych na raz. Wiążą je wspólne wartości.
Wracając do mojego przykładu. Mój pierwszy zestaw danych wygląda tak:
'Kurs SQL dla użytkowników - od podstaw', 999zł
'Kurs SQL dla twórców - od podstaw', 999zł
Chciałbym dołożyć do niego drugi zestaw danych z datami kursów. Aby powiązać te dwa zestawy ze sobą muszą współdzielić niektóre dane. W moim przypadku będzie to nazwa kursu.
Oprócz tego drugi zestaw danych będzie cechował się dodatkowym atrybutem określającym datę rozpoczęcia kursu. Czyli wyglądał tak:
'Kurs SQL dla użytkowników - od podstaw', 2022-07-02
'Kurs SQL dla twórców - od podstaw', 2022-07-09
Dzięki wspólnej wartości, w obu zestawach, atrybutu przechowującego nazwę kursu można te zestawy powiązać ze sobą. Dzięki powiązaniu z każdego zestawu można wybrać dane znajdujące się jedynie w konkretnym zestawie.
W moim przypadku nazwę kursu można pobrać z dowolnego zestawu. Bo jest wspólna. Natomiast tylko z pierwszego zestawu można pobrać cenę, a jedynie z drugiego datę rozpoczęcia.
Jest to bardzo uproszczony przykład skupiający się na zilustrowaniu różnicy pomiędzy 'relation’, a 'relationship’.
Mam dwa zestawy danych. Dane w każdym zestawie są pokrewne w stosunku do siebie. Są skoligacone. Współdzielą te same atrybuty.
Natomiast obie relacje są powiązane ze sobą wspólnymi danymi. Współdzielą te same wartości danych.
Prowadzę szkolenia i kursy z podstaw SQL. Sprawdź ofertę moich kursów SQL.
Wole mongo z mikroserwisami
Jasne 🙂
A wiesz, że Oracle dostarcza swoją bazę danych z API MongoDB?