Раванди дархости маълумоти 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; -- хатогӣ меорад
Барои иҷозат додани нест кардани автоматӣ бо нест кардани сабтҳои пайваст, бояд explicitly ON DELETE CASCADE дар вақти сохтани калиди хориҷӣ нишон дода шавад.