Typy związków między encjami: 1:1, 1:n, n:n

Realizacja, liczebność, klucze obce, związki pośrednie — INF.03

Teoria Rodzaje związków między encjami

  • Związek 1:1 — jeden rekord jednej tabeli przyporządkowany jest do dokładnie jednego rekordu drugiej, np. Osoba i Paszport
  • Związek 1:n — jeden rekord matki jest powiązany z wieloma rekordami potomnymi, np. Klasa – Uczniowie
  • Związek n:n — wiele rekordów w obu tabelach powiązanych, realizowane przez tabelę pośrednią, np. Uczniowie – Kursy

Każdy związek ma specyficzne wymagania odnośnie kluczy i liczebności, które trzeba poprawnie projektować.

Związek 1:1 — realizacja i klucze

W modelu relacyjnym związek 1:1 jest najczęściej realizowany przez:

  • Klucz podstawowy (PK) jednej tabeli jest jednocześnie kluczem obcym (FK) do drugiej tabeli.
  • Alternatywnie: osobna tabela z dwoma PK i wzajemnymi FK.
  • Przykład: Tabela Osoba i Paszport; w tabeli Paszport osoba_id jest zarówno PK jak i FK do Osoba.
CREATE TABLE Osoba (
  id INT PRIMARY KEY,
  imie VARCHAR(30),
  nazwisko VARCHAR(30)
);
CREATE TABLE Paszport (
  osoba_id INT PRIMARY KEY,
  numer VARCHAR(16),
  FOREIGN KEY (osoba_id) REFERENCES Osoba(id)
);
  

Związek 1:n — realizacja i liczebność

W związkach 1 do wielu:

  • Klucz podstawowy tabeli „1” jest referencją (FK) w tabeli „n”.
  • Każdy rekord z tabeli „n” może być powiązany tylko z jednym rekordem z tabeli „1”.
  • Przykład: tabela Klasa i Uczniowie - uczniowie.klasa_id to FK do klasa.id.
CREATE TABLE Klasa (
  id INT PRIMARY KEY,
  nazwa VARCHAR(20)
);
CREATE TABLE Uczniowie (
  id INT PRIMARY KEY,
  imie VARCHAR(30),
  nazwisko VARCHAR(30),
  klasa_id INT,
  FOREIGN KEY (klasa_id) REFERENCES Klasa(id)
);
  

Związek n:n — realizacja przez tabelę pośrednią

Przykład relacji wiele do wielu:

  • Używamy trzeciej tabeli pośredniej z dwoma FK do obu tabel.
  • Każdy rekord w tabeli pośredniej łączy jeden rekord z tabeli A z rekordem z tabeli B.
  • Przykład: relacja UczniowieKursy przez tabelę Uczniowie_Kursy.
CREATE TABLE Kursy (
  id INT PRIMARY KEY,
  nazwa VARCHAR(50)
);
CREATE TABLE Uczniowie_Kursy (
  uczen_id INT,
  kurs_id INT,
  PRIMARY KEY (uczen_id, kurs_id),
  FOREIGN KEY (uczen_id) REFERENCES Uczniowie(id),
  FOREIGN KEY (kurs_id) REFERENCES Kursy(id)
);
  

Ćwiczenie 1 Analiza i rozpoznanie związków

Zadanie: Na podstawie opisu relacji w systemie szkolnym (np. nauczyciele-klasy, uczniowie-zajęcia) opisz typy związków i naszkicuj diagram ERD.
  (Nauczyciel) 1---n (Klasy)
  (Uczniowie)  n---n (Zajęcia)
  (Rodzice)    1---1 (Uczeń)

Ćwiczenie 2 Projektowanie kluczy obcych

Zadanie: Dla systemu bibliotecznego zaprojektuj tabele i klucze dla relacji: książki, autorzy, wypożyczenia, czytelnicy. Uwzględnij typy związków.
CREATE TABLE Autorzy (
  id INT PRIMARY KEY,
  imie VARCHAR(30),
  nazwisko VARCHAR(30)
);

CREATE TABLE Ksiazki (
  id INT PRIMARY KEY,
  tytul VARCHAR(100),
  autor_id INT,
  FOREIGN KEY (autor_id) REFERENCES Autorzy(id)
);

CREATE TABLE Czytelnicy (
  id INT PRIMARY KEY,
  imie VARCHAR(30),
  nazwisko VARCHAR(30)
);

CREATE TABLE Wypozyczenia (
  id INT PRIMARY KEY,
  czytelnik_id INT,
  ksiazka_id INT,
  data_wypozyczenia DATE,
  FOREIGN KEY (czytelnik_id) REFERENCES Czytelnicy(id),
  FOREIGN KEY (ksiazka_id) REFERENCES Ksiazki(id)
);

Ćwiczenie 3 Realizacja związku n:n i normalizacja

Zadanie: Zaprojektuj relację wiele-do-wielu pomiędzy uczniami i zajęciami oraz opisz normalizację i zalety stosowania tabel pośrednich.
CREATE TABLE Uczniowie (
  id INT PRIMARY KEY,
  imie VARCHAR(30),
  nazwisko VARCHAR(30)
);

CREATE TABLE Zajecia (
  id INT PRIMARY KEY,
  nazwa VARCHAR(50)
);

CREATE TABLE Uczniowie_Zajecia (
  uczen_id INT,
  zajecie_id INT,
  PRIMARY KEY (uczen_id, zajecie_id),
  FOREIGN KEY (uczen_id) REFERENCES Uczniowie(id),
  FOREIGN KEY (zajecie_id) REFERENCES Zajecia(id)
);
-- Normalizacja: unikanie powtarzania danych, spójność relacji

Quiz Sprawdź wiedzę o związkach encji!

  1. Co odróżnia związek 1:1 od 1:n?
  2. Jak realizujemy związek n:n w relacyjnej bazie?
  3. Dlaczego stosujemy tabele pośrednie?
  4. Jak zaprojektować klucz obcy dla związku 1:n?
  • Związek 1:1 wiąże się z unikalnym powiązaniem rekordów, 1:n — jeden z wieloma.
  • Poprzez tabelę pośrednią z dwoma FK.
  • Zapewnia elastyczność i normalizację bazy danych.
  • FK dodajemy do tabeli z „wieloma” rekordami.

Checklista Kluczowe umiejętności

  • Rozróżniam typy związków i ich liczbę
  • Potrafię projektować klucze obce i tabele pośrednie
  • Wiem jak modelować związki w ER i SQL
  • Umiem normalizować i wyjaśnić relacje n:n
Materiały: INF.03 — Relacje encji, liczebność i klucze · Autor: Tomasz Puchała © 2025