Wpis ten rozpoczyna serię kilu postów, które są moimi troszkę wygładzonymi notatkami z nauki SQL. Spora część to wynik pracy z książką “Ćwiczenia praktyczne. SQL” – Pana śp. Marcina Lisa. Wszystkie przykłady oraz treści dotyczą serwera PostgreSql oraz jego klienta psql. Nie jest to w żadnym razie opracowanie mające uczyć innych SQL – po prostu ja mam notatki online, a może komuś się też przydadzą. Coś się nie zgadza, to napisz.
Podstawowe zagadnienia
Tabela (relacja) – składa się z wierszy i kolumn. Relacyjne bazy danych składają się z tabel, które posiadają relacje, tj. logiczne więzi pomiędzy sobą. Tabela w ujęciu matematycznym jest podzbiorem iloczynu kartezjańskiego , ten natomiast w matematyce zwany jest relacją, stąd też tabele nazywane są również relacjami.
Twórca relacyjnego modelu danych – Edgar Frank Codd – używał określenia relacji zamiast tabeli, atrybutu zamiast kolumny, oraz krotki zamiast wiersza/rekordu.
PRIMARY KEY – klucz główny tabeli – podstawa tworzenia logicznych powiązań pomiędzy tabelami. Wartości kolumny, która posiada ten atrybut muszą być unikalne i niepuste.
Relacja między tabelami – żeby logicznie powiązać ze sobą dwie tabele, wprowadza się do jednej z nich klucz główny drugiej – zwykle jest to kolumna z nr id. Przykładowo jeżeli będą tabele zamówienia i klienci, to wprowadza się kolumnę z atrybutem PRIMARY KEY tabeli klienci do tabeli zamówienia.
Encja (entity) = klasa(atrybuty, metody) = tabela
Instancja encji = obiekt = konkretny rekord/wiersz tabeli
Typy relacji
- Jeden do jednego – wiersz z tabeli X do wiersza z tabeli Y. Jeden pesel do jednego nazwiska i odwrotnie.
- jeden do wielu – jeden wiersz tabeli X do wielu wierszy z tabeli Y. Jeden klient może złożyć wiele zamówień ale każde zamówienie odnosi się tylko do jednego klienta.
- wiele do wielu – Kiedy wielu elementom jednej tabeli odpowiada jeden lub więcej elementów drugiej tabeli. W praktyce definiuje się ją jako dwie relacje jeden do wielu: jeden wiersz z tabeli X do wielu wierszy z tabeli Y, oraz jeden wiersz z tabeli Y do wielu wierszy w tabeli X.
Przykład:
Książka może posiadać jednego lub wielu autorów, oraz wiele autorów mogło napisać razem książkę lub wiele książek.W tej relacji stosuje się trzecią tabelę (tabela skrzyżowań), która zawiera klucze główne tabeli X i Y – złożony klucz podstawowy. W praktyce były by to nr id tabeli autorzy i książki, np. ksiazka_id | autor_id.
Kilka Ogólnych zasad
- Tabela zawsze musi mieć dobrze określony klucz główny, aby jednoznacznie móc identyfikować każdy jej wiersz/rekord.
- Nie duplikuj wartości w tabelach, np. ten sam adres wydawnictwa i różne książki. Jeśli zdarzy się utworzyć taką tabelę, to trzeba ją rozbić na dwie, a w razie potrzeby na więcej powiązanych ze sobą tabel.
- Twórz w miarę możliwości informacje atomowe (niepodzielne), np. adres rozbijaj na miasto, ulicę, kod. Przykład z wypożyczaniem książek:
Źle:klient Id | książkaId 1 | 1, 2, 3
Dobrze:
klient Id | książkaId 1 | 1 1 | 2 1 | 3
- Unikaj pustych pól w bazie. W przypadku gdy są to przykładowo adresy zameldowania, to czasem ktoś takiego nie posiada i może być OK – jest to też jakaś informacja. W przypadku gdy taka kolumna miała by jednak dużo takich pól, trzeba zrobić osobną tabelę. Przykładowo gdyby istniała kolumna zawierająca uwagi do zakupu, które rzadko by się pojawiały.
- Zastanów się dobrze i określ cel jaki chcesz osiągnąć tworząc bazę, zanim tabele wypełnią się rekordami.