DB
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
OsobaiPaszport; w tabeli Paszportosoba_idjest 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
KlasaiUczniowie-uczniowie.klasa_idto FK doklasa.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
Uczniowie–Kursyprzez 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!
- Co odróżnia związek 1:1 od 1:n?
- Jak realizujemy związek n:n w relacyjnej bazie?
- Dlaczego stosujemy tabele pośrednie?
- 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