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:
- Meghatározzák a "szülő" (Parent) táblában az elsődleges kulcsot. Ez egyedileg azonosít minden rekordot.
- A "gyermek" (Child) táblában létrehoznak egy oszlopot (vagy oszlopokat), amely külső kulcsként fog szolgálni.
- Ez az oszlop kapcsolódik a "szülő" tábla elsődleges kulcsához.
- 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)
);