Ako implementovať vzťah mnoho na mnoho (M2M) v SQL?
sobes.tech AI
Odpoveď od AI
Na implementáciu vzťahu "mnoho ku mnohým" v SQL sa používa sprostredkovacia (prepojovacia) tabuľka. Táto tabuľka obsahuje dva cudzie kľúče, ktoré odkazujú na primárne kľúče dvoch tabuliek, medzi ktorými sa vzťah vytvára.
Predpokladajme, že máme tabuľky authors (autori) a books (knihy), a chceme implementovať vzťah, kde jeden autor môže napísať veľa kníh, a jedna kniha môže byť napísaná mnohými autormi.
-
Vytvorenie entitných tabuliek: Vytvoríme hlavné tabuľky
authorsabooks.-- Tabuľka autorov CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Tabuľka kníh CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL ); -
Vytvorenie prepojovacej tabuľky: Vytvoríme tabuľku
author_book, ktorá bude spájať autorov a knihy. Táto tabuľka bude obsahovať cudzie kľúče odkazujúce naauthor_idabook_id.-- Prepojovacia tabuľka pre vzťah Mnoho ku Mnoh CREATE TABLE author_book ( author_id INT, book_id INT, PRIMARY KEY (author_id, book_id), -- Zložený primárny kľúč pre jedinečnosť páru FOREIGN KEY (author_id) REFERENCES authors(author_id), FOREIGN KEY (book_id) REFERENCES books(book_id) );PRIMARY KEY (author_id, book_id)zabezpečuje, že každý pár (autor, kniha) je v prepojovacej tabuľke jedinečný, čím sa zabraňuje duplikácii vzťahov.- Obmedzenia
FOREIGN KEYzabezpečujú referenčnú integritu, garantujúc, žeauthor_idabook_idv tabuľkeauthor_bookzodpovedajú existujúcim záznamom v tabuľkáchauthorsabooks.
-
Vkladanie údajov: Vkladáme údaje do tabuliek.
-- Vkladanie údajov do tabuľky autorov INSERT INTO authors (author_id, name) VALUES (1, 'Author A'), (2, 'Author B'), (3, 'Author C'); -- Vkladanie údajov do tabuľky kníh INSERT INTO books (book_id, title) VALUES (101, 'Book 1'), (102, 'Book 2'), (103, 'Book 3'); -- Vkladanie údajov do prepojovacej tabuľky (vzťahy medzi autormi a knihami) INSERT INTO author_book (author_id, book_id) VALUES (1, 101), -- Autor A napísal knihu 1 (1, 102), -- Autor A napísal knihu 2 (2, 101), -- Autor B napísal knihu 1 (3, 103), -- Autor C napísal knihu 3 (1, 103); -- Autor A napísal knihu 3 -
Dotazy na údaje: Na získanie súvisiacich údajov sa používajú operácie
JOIN.-
Získať knihy napísané určitým autorom:
SELECT b.title FROM books b JOIN author_book ab ON b.book_id = ab.book_id WHERE ab.author_id = 1; -- Knihy napísané autorom s ID = 1 -
Získať autorov určitej knihy:
SELECT a.name FROM authors a JOIN author_book ab ON a.author_id = ab.author_id WHERE ab.book_id = 101; -- Autori knihy s ID = 101 -
Získať všetky knihy s ich autormi:
SELECT b.title, a.name FROM author_book ab JOIN books b ON ab.book_id = b.book_id JOIN authors a ON ab.author_id = a.author_id;
-
Tabuľka author_book je kľúčom k implementácii M2M, pretože uchováva všetky páry prepojených entít.