SQLде көптөн-көпкө байланышты (M2M) кантип ишке ашыруу керек?
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таблицасын түзөбүз, ал жазуучулар менен китептерди байланыштырат. Бул таблица эки сырткы ачкычты камтыйт, аларauthor_idжанаbook_idке шилтеме кылат.-- Много-ка-Много байланыш үчүн байланыштыргыч таблица 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_idauthorsжанаbooksтаблицаларындагы бар жазууларына шилтеме кылганын кепилдейт.
-
Маалыматтарды кошуу: Маалыматтарды таблицаларга кошобуз.
-- Жазуучулардын таблицасына маалыматтарды кошуу 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), -- Author A Book 1 жазган (1, 102), -- Author A Book 2 жазган (2, 101), -- Author B Book 1 жазган (3, 103), -- Author C Book 3 жазган (1, 103); -- Author 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 реализациясынын ачкычы болуп саналат, анткени ал бардык байланышкан объекттердин парларын сактайт.