Junior — Middle
Ինչ է տեղի ունենում PostgreSQL տվյալների բազայում, եթե արտաքին բանալի միջոցով կապված այլ աղյուսակի հետ գրանցումը ջնջելիս, բացահայտ գործողություն նշված չէ?
sobes.tech AI
Պատասխան AI-ից
PostgreSQL- ում, եթե արտաքին բանալի միջոցով կապված այլ աղյուսակից գրանցում ջնջելիս բացահայտ գործողություն չի նշվում (օրինակ, ON DELETE CASCADE կամ ON DELETE SET NULL), ապա նախնական վարքագիծը ON DELETE NO ACTION է:
Սա նշանակում է, որ այն փորձը, երբ փորձում եք ջնջել գրանցում, որի վրա հղում է կատարվում այլ աղյուսակից, կհանգեցնի արտաքին բանալի սահմանափակման սխալի, և ջնջումը չի կատարվի:
Այսպիսով, տվյալների բազան կանխում է տվյալների ամբողջականության խախտումը՝ թույլ չտալով ծնողական գրանցումը ջնջել, մինչեւ որ կապված դուստրային գրանցումները գոյություն ունեն:
Օրինակ՝
-- պատվերների աղյուսակ՝ արտաքին բանալի հաճախորդների աղյուսակին
CREATE TABLE customers (
id SERIAL PRIMARY KEY
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INT REFERENCES customers(id)
);
-- փորձել հաճախորդը ջնջել, որը ունի պատվերներ, առանց `ON DELETE CASCADE`
DELETE FROM customers WHERE id = 1; -- կհանգեցնի սխալի
Ճանապարհ տալու համար ավտոմատ ջնջել կապված գրանցումները, անհրաժեշտ է բացահայտ նշել ON DELETE CASCADE արտաքին բանալի ստեղծելիս։