SQL-də çox-çox (M2M) əlaqəsini necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
SQL-də "çoxdan çox" əlaqəni həyata keçirmək üçün aralıq (birlikdə) cədvəl istifadə olunur. Bu cədvəl, əlaqə qurulan iki cədvəlin birincil açarlarına istinad edən iki xarici açar ehtiva edir.
Gəlin, authors (müəlliflər) və books (kitablar) cədvəllərimiz olduğunu və bir müəllifin çox kitab yaza biləcəyi, bir kitabın isə çox müəllif tərəfindən yazıla biləcəyi bir əlaqəni həyata keçirmək istədiyimizi fərz edək.
-
Varlıq cədvəllərini yaratmaq: Əsas cədvəllər
authorsvəbooksyaradılır.-- Müəlliflər cədvəli CREATE TABLE authors ( author_id INT PRIMARY KEY, name VARCHAR(255) NOT NULL ); -- Kitablar cədvəli CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(255) NOT NULL ); -
Əlaqə cədvəlini yaratmaq:
author_bookcədvəli yaradılır, bu cədvəl müəlliflər və kitabları birləşdirir. Bu cədvəlauthor_idvəbook_id-yə istinad edən xarici açarları ehtiva edir.-- Çoxdan çox əlaqə üçün əlaqə cədvəli CREATE TABLE author_book ( author_id INT, book_id INT, PRIMARY KEY (author_id, book_id), -- Unikal olmaq üçün birləşmiş birincil açar FOREIGN KEY (author_id) REFERENCES authors(author_id), FOREIGN KEY (book_id) REFERENCES books(book_id) );PRIMARY KEY (author_id, book_id)hər bir müəllif-kitab cütlüyünün cədvəldə unikal olmasını təmin edir, təkrarlamaları qarşısını alır.FOREIGN KEYməhdudiyyətləri referensial bütövlüyü təmin edir,author_idvəbook_id-ninauthorsvəbookscədvəllərində mövcud qeydlərə uyğun olmasını təmin edir.
-
Məlumatların daxil edilməsi: Məlumatlar cədvəllərə daxil edilir.
-- Müəlliflər cədvəlinə məlumat daxil etmək INSERT INTO authors (author_id, name) VALUES (1, 'Author A'), (2, 'Author B'), (3, 'Author C'); -- Kitablar cədvəlinə məlumat daxil etmək INSERT INTO books (book_id, title) VALUES (101, 'Book 1'), (102, 'Book 2'), (103, 'Book 3'); -- Əlaqə cədvəlinə məlumat daxil etmək (müəlliflər və kitablar arasındakı əlaqələr) INSERT INTO author_book (author_id, book_id) VALUES (1, 101), -- Müəllif A Book 1-i yazdı (1, 102), -- Müəllif A Book 2-ni yazdı (2, 101), -- Müəllif B Book 1-i yazdı (3, 103), -- Müəllif C Book 3-ü yazdı (1, 103); -- Müəllif A Book 3-ü yazdı -
Məlumatların sorğulanması: Bağlı məlumatları əldə etmək üçün
JOINəməliyyatlarından istifadə olunur.-
Müəyyən bir müəllifin yazdığı kitabları əldə etmək:
SELECT b.title FROM books b JOIN author_book ab ON b.book_id = ab.book_id WHERE ab.author_id = 1; -- ID-si 1 olan müəllifin kitabları -
Müəyyən bir kitabın müəlliflərini əldə etmək:
SELECT a.name FROM authors a JOIN author_book ab ON a.author_id = ab.author_id WHERE ab.book_id = 101; -- ID-si 101 olan kitabın müəllifləri -
Bütün kitablar və onların müəllifləri:
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 cədvəli M2M-nin həyata keçirilməsi üçün vacibdir, çünki o, bütün əlaqəli entitələrin cütlərini saxlayır.