Junior
Ինչպես են կարգավորվում աղյուսակների միջև կապերը ռելացիոնալ տվյալների բազաներում?
sobes.tech AI
Պատասխան AI-ից
Հարաբերություններն առնչվող տվյալների բազաներում կարգավորվում են արտաքին բանալիներով (Foreign Keys):
Արտաքին բանալին այն սյունակն է կամ սյունակների հավաքածուն, որը հղում է մյուս տվյալների բազայի առաջինական բանալուն (Primary Key): Դա ստեղծում է տրամաբանական կապ երկու տողերի միջև:
Հարաբերության կարգավորելիս:
- Հիմնական բանալին սահմանվում է "մայր" (Parent) աղյուսակում: Այս բանալին յուրահատուկ է յուրաքանչյուր գրառման համար:
- "Երեխա" (Child) աղյուսակում ստեղծվում է սյունակ (կամ սյունակների հավաքածու), որը կծառայի որպես արտաքին բանալին:
- Այս սյունակը կապվում է "մայր" աղյուսակի առաջինական բանալու հետ:
- Կարգավորվում են տվյալների ամբողջականության սահմանափակումները:
- 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)
);