Sobes.tech
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:

  1. Određuje se primarni ključ u "roditeljskoj" (Parent) tablici. Taj primarni ključ jedinstveno identificira svaki zapis.
  2. U "kćerki" (Child) tablici se kreira stupac (ili skup stupaca) koji će služiti kao strani ključ.
  3. Taj stupac se povezuje s primarnim ključem "roditeljske" tablice.
  4. 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)
);