Junior
Kako se podešavaju veze između tabela u relacionim bazama podataka?
sobes.tech АИ
Одговор од АИ
U relacijskim bazama podataka veze između tablica se uspostavljaju pomoću stranih ključeva (Foreign Keys).
Strani ključ je stupac ili skup stupaca u jednoj tablici koji se odnosi na primarni ključ (Primary Key) druge tablice. To uspostavlja logičku vezu između zapisa u dvije tablice.
Pri uspostavljanju veze:
- Određuje se primarni ključ u "roditeljskoj" (Parent) tablici. Taj primarni ključ jedinstveno identificira svaki zapis.
- U "kćerki" (Child) tablici se kreira stupac (ili skup stupaca) koji će služiti kao strani ključ.
- Taj stupac se povezuje s primarnim ključem "roditeljske" tablice.
- Postavljaju se ograničenja integriteta podataka (Constraints):
- REFERENCES: Navodi na koju tablicu i koji stupac (primarni ključ) se odnosi strani ključ.
- ON UPDATE behavior: Određuje što se događa s zapisima u "kćerki" tablici kada se promijeni primarni ključ u "roditeljskoj". Opcije:
CASCADE: Promjene se kaskadno primjenjuju na zapise u "kćerki" tablici.SET NULL: Vrijednosti stranog ključa u "kćerki" tablici se postavljaju na NULL.RESTRICT: Promjena je zabranjena ako postoje povezani zapisi u "kćerki".NO ACTION: Slično kao RESTRICT u većini DBMS-ova.SET DEFAULT: Vrijednosti stranog ključa se postavljaju na zadanu vrijednost.
- ON DELETE behavior: Određuje što se događa s zapisima u "kćerki" kada se obriše zapis u "roditeljskoj". Opcije su iste kao i za
ON UPDATE.
Primjer SQL sintakse za stvaranje veze:
CREATE TABLE Customers (
customer_id INT PRIMARY KEY, // Primarni ključ u tablici Customers
customer_name VARCHAR(255)
);
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT, // Strani ključ koji se odnosi na customer_id u tablici Customers
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
ON UPDATE CASCADE // Kada se promijeni customer_id u Customers, promijenit će se i ovdje
ON DELETE CASCADE // Kada se obriše Customer, obrisat će se i povezane Orders
);
Vrste veza između tablica:
| Vrsta veze | Opis | Primjer |
|---|---|---|
| One-to-One (1:1) | Jedan zapis u prvoj tablici odgovara jednom zapisu u drugoj i obrnuto. Rijetko u relacijskim bazama. | Korisnik i njegov profil. |
| One-to-Many (1:N) | Jedan zapis u prvoj tablici odgovara mnogim zapisima u drugoj, ali svaki zapis u drugoj odgovara samo jednom u prvoj. | Kupac i njegove narudžbe. |
| Many-to-Many (N:M) | Mnoge zapise u prvoj tablici odgovaraju mnogim u drugoj i obrnuto. Implementira se putem posredničke (povezujuće) tablice. | Proizvodi i kategorije. |
Za Many-to-Many vezu kreira se treća tablica koja sadrži strane ključeve na obje tablice koje treba povezati.
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 ( // Povezujuća tablica
product_id INT,
category_id INT,
PRIMARY KEY (product_id, category_id), // Složeni primarni ključ
FOREIGN KEY (product_id) REFERENCES Products(product_id),
FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);