Sobes.tech
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 արտաքին բանալի ստեղծելիս։