Sobes.tech
Junior

Hogyan állítják be a kapcsolatok a táblák között relációs adatbázisokban?

sobes.tech MI

Válasz az MI-től

A relációs adatbázisokban a táblák közötti kapcsolatokat külső kulcsok (Foreign Keys) segítségével állítják be.

A külső kulcs egy oszlop vagy oszlopok halmaza egy táblában, amely egy másik tábla elsődleges kulcsára (Primary Key) hivatkozik. Ez logikai kapcsolatot teremt két tábla rekordjai között.

A kapcsolat beállításakor:

  1. Meghatározzák a "szülő" (Parent) táblában az elsődleges kulcsot. Ez egyedileg azonosít minden rekordot.
  2. A "gyermek" (Child) táblában létrehoznak egy oszlopot (vagy oszlopokat), amely külső kulcsként fog szolgálni.
  3. Ez az oszlop kapcsolódik a "szülő" tábla elsődleges kulcsához.
  4. Adatintegritási korlátozásokat (Constraints) állítanak be:
    • REFERENCES: Megmutatja, hogy melyik táblára és melyik oszlopra (elsődleges kulcs) hivatkozik a külső kulcs.
    • ON UPDATE viselkedés: Meghatározza, mi történik a gyermek tábla rekordjaival, ha a szülő tábla elsődleges kulcsa megváltozik. Változatok:
      • CASCADE: A változások cascadelve alkalmazódnak a gyermek rekordokra.
      • SET NULL: A külső kulcs értékei NULL-ra változnak.
      • RESTRICT: A változtatás megtagadva, ha kapcsolódó gyermek rekordok léteznek.
      • NO ACTION: Hasonló a RESTRICT-hez több DBMS-ben.
      • SET DEFAULT: A külső kulcs értéke az alapértelmezett értékre változik.
    • ON DELETE viselkedés: Meghatározza, mi történik a gyermek rekordokkal, ha a szülő rekordját törlik. Változatok megegyeznek az ON UPDATE-tel.

SQL szintaxis példája kapcsolat létrehozására:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, // A Customer táblában az elsődleges kulcs
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, // Külső kulcs, amely a Customers táblában a customer_id-re hivatkozik
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE // Ha a customer_id változik a Customers-ben, változik az Orders-ben is
    ON DELETE CASCADE // Ha a Customer törlésre kerül, törlődnek a kapcsolódó Orders rekordok
);

A táblák közötti kapcsolatok típusai:

Kapcsolat típusa Leírás Példa
One-to-One (1:1) Egy rekord az első táblában megfelel egy rekordnak a másodikban és fordítva. Ritka a relációs adatbázisokban. Felhasználó és profilja.
One-to-Many (1:N) Egy rekord az első táblában megfelel sok rekordnak a másodikban, de minden második rekord csak egy elsőhöz tartozik. Ügyfél és rendelései.
Many-to-Many (N:M) Sok rekord az első táblában megfelel sok rekordnak a másodikban és fordítva. Köztes (kapcsoló) táblán keresztül valósul meg. Termékek és kategóriák.

A Many-to-Many kapcsolat esetén egy harmadik, kapcsoló táblát hoznak létre, amely mindkét táblára külső kulcsokat tartalmaz.

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 ( // Kapcsoló tábla
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), // Összetett elsődleges kulcs
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);