Junior
Jak konfigurowane są relacje między tabelami w relacyjnych bazach danych?
sobes.tech AI
Odpowiedź od AI
W relacyjnych bazach danych relacje między tabelami są konfigurowane za pomocą kluczy obcych (Foreign Keys).
Klucz obcy to kolumna lub zestaw kolumn w jednej tabeli, które odwołują się do klucza głównego (Primary Key) innej tabeli. Ustanawia on logiczne powiązanie między rekordami w dwóch tabelach.
Podczas konfigurowania relacji:
- Definiuje się klucz główny w tabeli "rodzica" (Parent). Klucz główny jednoznacznie identyfikuje każdy rekord.
- W tabeli "dziecka" (Child) tworzy się kolumnę (lub zestaw kolumn), która będzie służyć jako klucz obcy.
- Ta kolumna w tabeli "dziecka" jest powiązana z kluczem głównym tabeli "rodzica".
- Ustanawia się ograniczenia integralności danych:
- REFERENCES: Wskazuje, do jakiej tabeli i kolumny (klucza głównego) odnosi się klucz obcy.
- ON UPDATE behavior: Określa, co się dzieje z rekordami w tabeli dziecka po zmianie klucza głównego w tabeli rodzica. Opcje:
CASCADE: Zmiany są kaskadowo stosowane do rekordów potomnych.SET NULL: Wartości klucza obcego w tabeli dziecka są ustawiane na NULL.RESTRICT: Operacja zmiany jest zabroniona, jeśli istnieją powiązane rekordy potomne.NO ACTION: Podobnie jak RESTRICT w większości systemów zarządzania bazami danych.SET DEFAULT: Wartości klucza obcego są ustawiane na wartość domyślną.
- ON DELETE behavior: Określa, co się dzieje z rekordami w tabeli dziecka po usunięciu rekordów w tabeli rodzica. Opcje są takie same jak dla
ON UPDATE.
Przykład składni SQL do tworzenia relacji:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, -- Klucz główny w tabeli Customer
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, -- Klucz obcy odwołujący się do customer_id w tabeli Customers
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE -- Przy zmianie customer_id w Customers, zmieni się również w Orders
ON DELETE CASCADE -- Przy usunięciu Customer, usunięte zostaną również powiązane Orders
);
Typy relacji między tabelami:
| Typ relacji | Opis | Przykład |
|---|---|---|
| One-to-One (1:1) | Jeden rekord w pierwszej tabeli odpowiada dokładnie jednemu rekordowi w drugiej i odwrotnie. Rzadki przypadek w relacyjnych bazach danych. | Użytkownik i jego profil. |
| One-to-Many (1:N) | Jeden rekord w pierwszej tabeli odpowiada wielu rekordom w drugiej, ale każdy rekord w drugiej odpowiada tylko jednemu w pierwszej. | Klient i jego zamówienia. |
| Many-to-Many (N:M) | Wiele rekordów w pierwszej tabeli odpowiada wielu rekordom w drugiej i odwrotnie. Realizuje się to przez tabelę pośrednią (łącznikową). | Produkty i kategorie. |
Dla relacji Many-to-Many tworzy się trzecią tabelę zawierającą klucze obce do obu tabel, które mają być powiązane.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_name VARCHAR(255)
);
CREATE TABLE Categories (
category_id INT PRIMARY KEY,
category_name VARCHAR(255)
);
CREATE TABLE ProductCategories ( -- Tabela łącznikowa
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), -- Klucz główny złożony
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);