🎯 Cele lekcji

🔗

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ę:

📊

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 uczestnictwaOpisNotacja IEPrzykł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 TABLE pracownicy (
  id_pracownika INT          AUTO_INCREMENT PRIMARY KEY,
  imie          VARCHAR(50)  NOT NULL,
  nazwisko      VARCHAR(100) NOT NULL,
  id_menedzera  INT          NULL,
  FOREIGN KEY (id_menedzera) REFERENCES pracownicy(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