5 fundamentów relacyjnej bazy danych

Wstęp

Terminologia relacyjnych baz danych może przyprawić o zawrót głowy. W jakiej relacji są krotka i rekord? Jakimi atrybutami musi cechować się pole aby być kandydatem na klucz? Który klucz jest bardziej kluczowy główny czy obcy? O tym i wiele więcej w niniejszej publikacji.

Publikacja w formie wideo

Słownictwo używane w publikacjach dotyczących relacyjnych baz danych i języka SQL jest mieszanką terminów pochodzących z matematycznej teorii zbiorów, diagramów związków encji oraz języka SQL. Uważam, że dla praktyków relacyjnych baz danych najważniejszy jest żargon relacyjnego motoru bazy danych i języka SQL. To w tym żargonie motor się z nami komunikuje. To w tym żargonie my wydajemy polecenia motorowi. I to w tym żargonie napisana jest dokumentacja. Uważam, że kluczowe dla uniknięcia nieporozumień jest komunikowanie się przy użyciu tych samych wyrażeń.

Co to jest baza danych, motor bazy danych i dane wyjaśniłem w publikacji 4 najważniejsze terminy bazodanowe. Teraz skupię się na terminach bezpośrednio związanych z relacyjną bazą danych.

Relacja/tabela

Określenie relacyjna w kontekście bazy danych oznacza model według jakiego zorganizowane są dane w bazie danych. Innymi słowy cechą charakterystyczną relacyjnej bazy danych są dane pogrupowane w relacje. Relacja jest terminem pochodzącym z matematycznej teorii zbiorów. Pracując z relacyjnymi motorami i językiem SQL zamiast terminu relacja zazwyczaj spotkasz się z terminem tabela.

Dane w tabeli współdzielą zestaw cech. Czyli tabela składowane w bazie danych dane o podobnych cechach logicznie grupuje w zbiory. Dane zgrupowane w tabeli powinny dotyczyć jednego bytu. Byt czyli cokolwiek o czym chcesz składować dane w bazie danych. Na przykład osoba, miejsce, przedmiot czy zdarzenie. Zadaniem tabeli jest ułatwić użytkownikom pracę z danymi. Dzięki tabeli użytkownik nie musi znać fizycznego miejsca składowania danych na dysku. Dostępem do danych zajmuje się motor bazy danych. Tabel w bazie danych może być wiele.

Ilustracja pokazująca jak tabele grupują składowane w bazie danych dane o podobnych cechach w logiczne zbiory.

Potrzebna jest choć jedna aby móc wstawić dane do bazy danych. Każda tabela musi posiadać unikalną w ramach bazy danych nazwę. Nazwą tabeli opisujesz byt, którego dane dotyczą. Na przykład tabelę z danymi o książkach możesz nazwać 'Książka’.

Na tabelę możesz patrzeć jako na kolekcję pokrewnych danych lub jak na zbiór atrybutów jakie muszą posiadać dane aby mogły zostać wstawione do bazy danych. W SQL wszystko jest tabelą. Tak źródło danych jak i wynik komendy.

Atrybut/kolumna

Dane aby zostały zgrupowane w konkretnej tabeli muszą spełniać określone przez tabelę wymagania. Czyli mieć określone atrybuty. Atrybut jest kolejnym terminem z teorii zbiorów. W żargonie relacyjnego motoru bazy danych i języka SQL atrybut nazywany jest kolumną. Kolumna jest najmniejszą strukturą w bazie danych. Reprezentuje cechę bytu o którym dane składujesz w bazie danych. Opisuje jedną pojedynczą wartość cechy. Na przykład cechą może być imię, a wartością napis 'Marcin’. Nazwa kolumny nadaje tej wartości kontekst. Cecha imię o wartości 'Marcin’ będzie znaczyła co innego w kolumnie o nazwie ImięAutora, a co innego w kolumnie o nazwie ImięTłumacza. Dane to wartości cech, które zostaną zamienione w informacje potrzebne do funkcjonowania Twojej organizacji.

Ilustracja jak nazwy kolumn nadają kontekst danym

Drugą oprócz nazwy składową kolumny jest typ. Typem mówisz motorowi bazy danych jaki rodzaj danych znajdzie w kolumnie. Wybierasz jeden z trzech: tekstowy, liczbowy lub datoczasowy. W ten sposób określasz jakie operacje będziesz móc wykonać na danych wskazanej kolumny. Jeśli kolumnę określisz jako liczbową to motor bazy danych nie pozwoli wstawić do niej napisu. Na przykład napisu 'Marcin’ do kolumny 'Cena’ o typie liczbowym. Z drugiej strony na danych z kolumny o typie tekstowym czy datoczasowym motor bazy danych nie pozwoli na wykonywanie mnożenia czy dzielenia.

Ilustracja pokazująca możliwe typy danych w kolumnie

W ramach tabeli nazwy kolumn muszą być unikalne. Tabela musi posiadać przynajmniej jedną kolumnę. Kolumny są najważniejsze z punktu widzenia danych ponieważ to przy ich pomocy definiujesz jakie dane znajdą się w bazie danych oraz jakie i jak kosztowne operacje na tych danych będzie można wykonać. Zgodnie z zasadami modelu relacyjnego i zdrowym rozsądkiem, każda tabela powinna posiadać jedną lub więcej kolumn, których kombinacja wartości jest unikalna w ramach tabeli.

Krotka/wiersz

Unikalne wartości jednoznacznie identyfikują instancję bytu przechowywaną w bazie danych. Na instancję bytu składają się wartości całego zestawu kolumn, które opisują jego cechy. Taka instancja w modelu relacyjnym nazywana jest krotką, a w języku SQL wierszem. Po angielsku krotka to tuple, a wiersz to row. Jako synonim wiersza występuje słowo rekord czyli po polsku zapis lub wpis. Motory relacyjnych baz danych częściej używają określenia row. Jeśli znasz programowanie obiektowe to możesz wyobrazić sobie tabelę jako klasę, kolumny jako pola, a wiersze jako obiekty tej klasy.

Ilustracja, że wiersz to wartości całego zestawu kolumn tabeli

W danym momencie nie wszystkie kolumny muszą posiadać wartość. Stan kolumny w którym wartości brakuje nazywany jest NULL. Szerzej o NULL mówiłem w publikacji Co to jest NULL i jak się z nim obchodzić w zapytaniach.

Primary key/klucz główny

Pozwalająca na jednoznaczną identyfikację każdego wiersza tabeli unikalna kombinacja wartości jednej lub więcej kolumn nazywana jest kluczem głównym. Dlatego klucz bo umożliwia wyszukiwanie według klucza. W teorii zbiorów klucz to minimalny zestaw atrybutów, który jednoznacznie określa każdy element. W przypadku relacyjnej bazy danych elementem jest wiersz tabeli. Żadna ze składowych klucza głównego nie może być NULL.

Ilustracja kolumny, której wartości jednoznacznie identyfikują każdy wiersz każdej tabeli.

Wartość klucza głównego nadawana jest w momencie wstawiania wiersza i pozwala na wskazanie danego rekordu w obrębie całej bazy danych. Kolumny wchodzące w skład klucza głównego pozwalają na określenie konkretnej tabeli w zakresie całej bazy danych. Klucz główny wymusza spójność danych w obrębie tabeli oraz pomaga w tworzeniu powiązań pomiędzy wierszami. Motor bazy danych zazwyczaj nie wymusza tworzenia klucza głównego dla tabeli. Niemniej każda tabela powinna klucz główny posiadać.

Foreign key/klucz obcy

W relacyjnych bazach danych w związki wchodzą wiersze tabel przy pomocy zduplikowanych danych. Związek może dotyczyć wierszy tej samej lub dwóch różnych tabel. Składowe kolumny klucza głównego wierszy źródłowych razem z wartościami kopiujesz do wierszy, które chcesz dowiązać. W docelowym wierszu skopiowane kolumny stają się składowymi klucza obcego. Dlatego nazywamy go obcym bo jego wartości pochodzą z innego wiersza.

Ilustracja jak wartości klucza głównego tabeli nadrzędnej kopiowane są do klucza obcego tabeli zależnej

Znacznie częściej wiązane są wiersze dwóch różnych tabel niż jednej. Tabela z której pochodzą łączące wartości nazywana jest tabelą nadrzędną. Możesz spotkać także określenia główna lub pierwotna. Tabela która wartości przyjęła nazywana jest tabelą podrzędną lub zależną. Klucz obcy wymusza spójność danych pomiędzy tabelą główną i zależną. Czyli klucz obcy tabeli zależnej może przyjąć jedynie wartość klucza głównego tabeli nadrzędnej.

Podsumowanie

Dziękuję za obejrzenie niniejszego materiału. Wiesz z niego, że tabela reprezentuje byt o którym chcesz przetwarzać dane. Kolumna to ważna dla Ciebie cecha bytu. Wiersz to unikalna instancja bytu. Na przykład potrzebujesz przetwarzać dane o książkach. Bytem jest wydanie książki oraz wydawca. Cechy książki, które są Ci potrzebne to tytuł, nazwisko autora, numer ISBN oraz wydawca. Decydujesz się stworzyć tabelę 'książka’ z kolumnami 'tytuł’, 'autor’, 'ISBN’ i 'wydawca_id’.

Ilustracja zależności tabeli nadrzędna i zależnej z przykładowymi danymi

Kolumnę isbn jako jednoznacznie identyfikującą wydanie książki możesz wyznaczyć na klucz główny. W innej tabeli przechowujesz dane o wydawcach. Tabelę nazywasz 'wydawca’. Potrzebne Ci cechy wydawcy to jego nazwa i adres. Zgodnie z zasadami budowy relacyjnych baz danych dodajesz kolumnę 'wydawca_id’ służącą jako klucz główny czyli identyfikator wydawcy w bazie danych. Jej wartości będziesz nadawać samodzielnie i kopiować do kolumny 'wydawca_id’ w tabeli książka. Wierszem tabeli wydawca będzie 'Helion SA’ jako nazwa, 'Kościuszki 1c, Gliwice’ jako adres i jeden jako wydawca_id. Instancją książki czyli wierszem tabeli książka będzie 'Projektowanie baz danych dla każdego. Przewodnik krok po kroku.’ w kolumnie tytuł. Michael J. Hernandez w kolumnie autor oraz numer ISBN w kolumnie isbn. Z kolumny wydawca_id tabeli wydawca kopiujesz wartość jeden aby powiązać wiersze obu tabel.

Niech spójność danych będzie z Tobą. A jeśli chcesz aby Twoje dane były zawsze spójne to koniecznie śledź mój blog.

Marcin Badtke

Przyjaźnie o SQL, bazach danych i ludziach

Może Ci się spodobać...

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *