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 при създаването на външния ключ.