Rozróżniać uczestnictwo obowiązkowe od opcjonalnego
Opisywać związki rekurencyjne (unarne)
🔗
1. Związek (Relationship) — podstawy
Związek (relationship) — semantyczne powiązanie między dwiema lub więcej encjami. Opisuje, jak instancje encji są ze sobą powiązane w modelowanej dziedzinie.
Związek charakteryzuje się:
Nazwą — czasownik lub rzeczownik opisujący powiązanie (np. "składa", "posiada", "należy_do")
Encjami uczestniczącymi — zwykle dwie (binarny), możliwe trójkowe i N-arne
Liczebnością (cardinality) — ile instancji jednej encji może być powiązanych z instancjami drugiej
Uczestnictwem (participation) — czy udział w związku jest obowiązkowy czy opcjonalny
Atrybutami — związki mogą mieć własne atrybuty (np. "data_rejestracji" w związku Student-Kurs)
📊
2. Liczebność (Cardinality): 1:1, 1:N, M:N
Relacja 1:1 — jeden do jednego
Każda instancja encji A jest powiązana z co najwyżej jedną instancją encji B i odwrotnie.
Pracownik
🔑 id_pracownika
imie, nazwisko
|——— 1:1 ———|
Komputer_sluzbowy
🔑 id_komputera
🔗 id_pracownika (FK, UNIQUE)
model, numer_seryjny
Implementacja SQL: Klucz obcy w tabeli podrzędnej z ograniczeniem UNIQUE.
Relacja 1:N — jeden do wielu
Jedna instancja encji A może być powiązana z wieloma instancjami encji B. Jeden rekord B pasuje do co najwyżej jednego A. Najczęstszy typ relacji!
Kategoria
🔑 id_kategorii
nazwa
|——— 1:N ———<
Produkt
🔑 id_produktu
🔗 id_kategorii (FK)
nazwa, cena
Implementacja SQL: Klucz obcy po stronie "wielu" (N) — w tabeli Produkt.
Relacja M:N — wiele do wielu
Wiele instancji encji A może być powiązanych z wieloma instancjami encji B. Wymaga tabeli pośredniej!
Student
🔑 id_studenta
imie, nazwisko
>——— M:N ———<
zapisy (tabela pośrednia)
🔗 id_studenta (FK+PK)
🔗 id_kursu (FK+PK)
data_zapisu
ocena
>——— N:M ———|
Kurs
🔑 id_kursu
nazwa, ects
Implementacja SQL: Tabela pośrednia z dwoma kluczami obcymi (tworzą złożony klucz główny).
⚡
3. Uczestnictwo i związki rekurencyjne
Uczestnictwo (Participation)
Typ uczestnictwa
Opis
Notacja IE
Przykład
Obowiązkowe (total)
Każda instancja MUSI uczestniczyć w związku
| (kreska)
Zamówienie MUSI mieć klienta
Opcjonalne (partial)
Instancja MOŻE, ale nie musi uczestniczyć
o (kółko)
Klient MOŻE, ale nie musi mieć zamówień
Notacja crow's foot dla relacji Klient — Zamówienie: klienci ||——o< zamowienia
Znaczenie: klient ma dokładnie 1 (||), zamówienie ma zero lub wiele (<o) klientów… właściwie odwrotnie:
— jeden klient może mieć zero lub wiele zamówień
— każde zamówienie musi należeć do dokładnie jednego klienta
Związek rekurencyjny (unary)
Encja jest związana sama ze sobą. Klasyczny przykład: hierarchia pracowników.
Pracownik
🔑 id_pracownika
imie, nazwisko
🔗 id_menedzera (FK → id_pracownika)
CREATE TABLEpracownicy (
id_pracownika INTAUTO_INCREMENT PRIMARY KEY,
imie VARCHAR(50) NOT NULL,
nazwisko VARCHAR(100) NOT NULL,
id_menedzera INTNULL,
FOREIGN KEY (id_menedzera) REFERENCESpracownicy(id_pracownika)
ON DELETE SET NULL
);
Prezes/CEO nie ma menedżera → id_menedzera = NULL. Wszystkie pozostałe osoby mają id_menedzera wskazujące na swojego przełożonego.
✏️
Zadania interaktywne
Zadanie 1Określ liczebność dla 5 par encji
Określ typ relacji (1:1 / 1:N / M:N) dla każdej pary encji:
Osoba — Dowód tożsamości
Nauczyciel — Klasy (nauczyciel prowadzi wiele klas)
Lekarz — Pacjenci (lekarz leczy wielu, pacjent jest leczony przez wielu)
Zamówienie — Pozycje zamówienia
Film — Aktorzy (film ma wielu aktorów, aktor gra w wielu filmach)
Zadanie 2Diagram E/R dla sklepu
System sklepu internetowego ma encje: Klient, Zamówienie, Produkt, Kategoria. Odpowiedz na pytania dotyczące tego diagramu:
Jakiego typu jest relacja Kategoria — Produkt?
1:1 (każda kategoria ma dokładnie jeden produkt)
1:N (jedna kategoria ma wiele produktów, każdy produkt należy do jednej kategorii)
M:N (produkt może należeć do wielu kategorii i odwrotnie)
Relacja Zamówienie — Produkt wymaga tabeli pośredniej. Jak powinna się nazywać?
Zadanie 3Kiedy uczestnictwo jest obowiązkowe?
Które z poniższych stwierdzeń POPRAWNIE opisuje uczestnictwo obowiązkowe?
Każda instancja encji MUSI być powiązana z co najmniej jedną instancją drugiej encji
Instancja encji MOŻE, ale nie musi być powiązana z drugą encją
Uczestnictwo obowiązkowe oznacza relację 1:1
Obowiązkowe uczestnictwo dotyczy tylko kluczy obcych
📌 Zapamiętaj
1:1 — FK + UNIQUE; 1:N — FK po stronie N; M:N — tabela pośrednia z dwoma FK
Uczestnictwo obowiązkowe: NOT NULL na kluczu obcym | opcjonalne: NULL dozwolone
Związek rekurencyjny: encja powiązana sama ze sobą (hierarchia, np. pracownik zarządza pracownikiem)
Tabela pośrednia M:N może mieć własne atrybuty (np. data_zapisu, ocena)