Sobes.tech
Junior

Ինչպես իրականացնել շատ-միայն հարաբերություն (M2M) SQL-ում?

sobes.tech AI

Պատասխան AI-ից

SQL-ում «շատ-շատ» հարաբերությունը իրականացնելիս օգտագործվում է միջնորդական (կապող) աղյուսակ: Այս աղյուսակը պարունակում է երկու արտաքին բանալիներ, որոնք հղում են երկու աղյուսակների հիմնական բանալիներին, որոնց միջև հաստատվում է հարաբերությունը:

Ենթադրենք, ունենք authors (մեղադրողներ) և books (գրքեր) աղյուսակները, և ուզում ենք իրականացնել հարաբերություն, որտեղ մեկ հեղինակ կարող է գրել շատ գրքեր, և մեկ գիրք կարող է գրել շատ հեղինակներ:

  1. Նախագծային աղյուսակների ստեղծում: Ստեղծենք հիմնական աղյուսակները 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
    );
    
  2. Կապող աղյուսակի ստեղծում: Ստեղծենք 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 արժեքները համապատասխան են գոյություն ունեցող գրանցումներին:
  3. Տվյալների ներմուծում: Տվյալներ ենք ավելացնում աղյուսակներին:

    -- Մեղադրողների տվյալների ներմուծում
    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
    
  4. Տվյալների հարցումներ: Վերցնելու համար կապված տվյալները օգտագործվում են 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 իրականացման համար, քանի որ այն պահում է բոլոր կապված զույգերը։