Sobes.tech
Junior

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.

  1. Varlıq cədvəllərini yaratmaq: Əsas cədvəllər authorsbooks yaradı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
    );
    
  2. Əlaqə cədvəlini yaratmaq: author_book cədvəli yaradılır, bu cədvəl müəlliflər və kitabları birləşdirir. Bu cədvəl author_idbook_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 KEY məhdudiyyətləri referensial bütövlüyü təmin edir, author_idbook_id-nin authorsbooks cədvəllərində mövcud qeydlərə uyğun olmasını təmin edir.
  3. 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ı
    
  4. 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.