Ինչպես իրականացնել շատ-միայն հարաբերություն (M2M) SQL-ում?
sobes.tech AI
Պատասխան AI-ից
SQL-ում «շատ-շատ» հարաբերությունը իրականացնելիս օգտագործվում է միջնորդական (կապող) աղյուսակ: Այս աղյուսակը պարունակում է երկու արտաքին բանալիներ, որոնք հղում են երկու աղյուսակների հիմնական բանալիներին, որոնց միջև հաստատվում է հարաբերությունը:
Ենթադրենք, ունենք authors (մեղադրողներ) և books (գրքեր) աղյուսակները, և ուզում ենք իրականացնել հարաբերություն, որտեղ մեկ հեղինակ կարող է գրել շատ գրքեր, և մեկ գիրք կարող է գրել շատ հեղինակներ:
-
Նախագծային աղյուսակների ստեղծում: Ստեղծենք հիմնական աղյուսակները
authorsևbooks:-- Մեղադրողների աղյուսակ CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Գրքերի աղյուսակ CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL ); -
Կապող աղյուսակի ստեղծում: Ստեղծենք
author_bookաղյուսակը, որը կապում է հեղինակներին և գրքերը:-- Շատ-շատ հարաբերության համար կապող աղյուսակ CREATE TABLE author_book ( author_id INT, book_id INT, PRIMARY KEY (author_id, book_id), -- Կոմպոզիտային հիմնական բանալին FOREIGN KEY (author_id) REFERENCES authors(author_id), FOREIGN KEY (book_id) REFERENCES books(book_id) );PRIMARY KEY (author_id, book_id)ապահովում է, որ յուրաքանչյուր զույգ (մեղադրող, գիրք) լինի յուրահատուկ, կանխելով կրկնությունները:FOREIGN KEYսահմանափակումները ապահովում են ռեֆերենցիոն ամբողջականությունը՝ համոզվելով, որauthor_idևbook_idարժեքները համապատասխան են գոյություն ունեցող գրանցումներին:
-
Տվյալների ներմուծում: Տվյալներ ենք ավելացնում աղյուսակներին:
-- Մեղադրողների տվյալների ներմուծում INSERT INTO authors (author_id, name) VALUES (1, 'Author A'), (2, 'Author B'), (3, 'Author C'); -- Գրքերի տվյալների ներմուծում INSERT INTO books (book_id, title) VALUES (101, 'Book 1'), (102, 'Book 2'), (103, 'Book 3'); -- Կապող աղյուսակի տվյալների ներմուծում (հարաբերություններ հեղինակների և գրքերի միջև) INSERT INTO author_book (author_id, book_id) VALUES (1, 101), -- Մեղադրող A գրել է Book 1 (1, 102), -- Մեղադրող A գրել է Book 2 (2, 101), -- Մեղադրող B գրել է Book 1 (3, 103), -- Մեղադրող C գրել է Book 3 (1, 103); -- Մեղադրող A գրել է Book 3 -
Տվյալների հարցումներ: Վերցնելու համար կապված տվյալները օգտագործվում են
JOINօպերատորները:-
Մատչելիքգրքեր, որոնք գրել է որոշակի հեղինակ՝SELECT b.title FROM books b JOIN author_book ab ON b.book_id = ab.book_id WHERE ab.author_id = 1; -- Գրքեր, որոնք գրել է հեղինակ ID = 1 -
Մատչելիքհեղինակներ որոշակի գրքի համար՝SELECT a.name FROM authors a JOIN author_book ab ON a.author_id = ab.author_id WHERE ab.book_id = 101; -- Գրքի հեղինակներ ID = 101 -
Բոլոր գրքերըև նրանց հեղինակները՝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;
-
author_book աղյուսակը կարևոր է M2M իրականացման համար, քանի որ այն պահում է բոլոր կապված զույգերը։