Sobes.tech
Junior

Ինչպես են կարգավորվում աղյուսակների միջև կապերը ռելացիոնալ տվյալների բազաներում?

sobes.tech AI

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

Հարաբերություններն առնչվող տվյալների բազաներում կարգավորվում են արտաքին բանալիներով (Foreign Keys):

Արտաքին բանալին այն սյունակն է կամ սյունակների հավաքածուն, որը հղում է մյուս տվյալների բազայի առաջինական բանալուն (Primary Key): Դա ստեղծում է տրամաբանական կապ երկու տողերի միջև:

Հարաբերության կարգավորելիս:

  1. Հիմնական բանալին սահմանվում է "մայր" (Parent) աղյուսակում: Այս բանալին յուրահատուկ է յուրաքանչյուր գրառման համար:
  2. "Երեխա" (Child) աղյուսակում ստեղծվում է սյունակ (կամ սյունակների հավաքածու), որը կծառայի որպես արտաքին բանալին:
  3. Այս սյունակը կապվում է "մայր" աղյուսակի առաջինական բանալու հետ:
  4. Կարգավորվում են տվյալների ամբողջականության սահմանափակումները:
    • REFERENCES: Նշում է, թե որ աղյուսակին և որ սյունակին է վերաբերում արտաքին բանալին:
    • ON UPDATE behavior: Որոշում է, թե ինչ տեղի կունենա "երեխա" աղյուսակի գրառումներում, երբ փոխվի "մայր" աղյուսակի առաջինական բանալին:
      • CASCADE: Փոփոխությունները կկատարվեն կասկադային:
      • SET NULL: Արտաքին բանալու արժեքները կդրվեն NULL:
      • RESTRICT: Փոփոխությունը արգելվում է, եթե առկա են կապված գրառումներ:
      • NO ACTION: Դեռևս նույնը, ինչ RESTRICT:
      • SET DEFAULT: Արտաքին բանալու արժեքները կդրվեն նախնական արժեք:
    • ON DELETE behavior: Որոշում է, թե ինչ տեղի կունենա, երբ մոր գրառումը ջնջվի:
      • Վերաբերում է ON UPDATE-ին:

SQL սինտաքսի օրինակ՝ կապ ստեղծելու համար:

CREATE TABLE Customers (
    customer_id INT PRIMARY KEY, // Մայր աղյուսակում առաջինական բանալին
    customer_name VARCHAR(255)
);

CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    customer_id INT, // Արտաքին բանալին, որը հղում է Customers-ի customer_id-ին
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
    ON UPDATE CASCADE // Երբ փոխվի customer_id-ը Customers-ում, փոխվում է նաև այստեղ
    ON DELETE CASCADE // Երբ ջնջվի Customer-ը, ջնջվում են նաև կապված Orders-ը
);

Տարբերակներ՝

Տիպը Նկարագրություն Օրինակ
One-to-One (1:1) Մի գրառում առաջին աղյուսակում համապատասխանում է մեկ գրառման երկրորդում և հակառակը: Դժվար է կիրառվում ռելացիոն տվյալների բազաներում: Օգտվող և նրա պրոֆիլը:
One-to-Many (1:N) Մի գրառում առաջին աղյուսակում համապատասխանում է մի շարք գրառումների երկրորդում, բայց յուրաքանչյուր երկրորդ գրառում համապատասխանում է միայն մեկին առաջինում: Հաճախորդ և նրա պատվերները:
Many-to-Many (N:M) Մեծ թվով գրառումներ առաջին աղյուսակում համապատասխանում են մեծ թվով գրառումներին երկրորդում և հակառակը: Կատարվում է միջնորդ (կապող) աղյուսակով: Ապրանքներ և կատեգորիաներ:

Many-to-Many հարաբերության համար ստեղծվում է երրորդ աղյուսակ, որը պարունակում է արտաքին բանալիներ երկու աղյուսակներից:

CREATE TABLE Products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(255)
);

CREATE TABLE Categories (
    category_id INT PRIMARY KEY,
    category_name VARCHAR(255)
);

CREATE TABLE ProductCategories ( // Կապող աղյուսակ
    product_id INT,
    category_id INT,
    PRIMARY KEY (product_id, category_id), // Կոմպոզիտային առաջինական բանալին
    FOREIGN KEY (product_id) REFERENCES Products(product_id),
    FOREIGN KEY (category_id) REFERENCES Categories(category_id)
);