powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / DELETE CASCADE & DELETE RESTRICT
3 сообщений из 3, страница 1 из 1
DELETE CASCADE & DELETE RESTRICT
    #35756887
expog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилась такая задача, но пока не придумал как можно максимально все автоматизировать и чтоб сохранилась целостность базы данных.
Приведу тут упрощенный пример. Есть 3 таблицы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE TABLE departments (
   department_id INTEGER UNIQUE NOT NULL, 
   ...
CONSTRAINT departments_pkey_department_id PRIMARY KEY (department_id)
)

CREATE TABLE item_templates (
    item_template_id INTEGER UNIQUE NOT NULL,
    department_id INTEGER NOT NULL,
CONSTRAINT item_templates_pkey_item_template_id PRIMARY KEY (item_template_id),
CONSTRAINT item_templates_fkey_department_id FOREIGN KEY (department_id) REFERENCES departments (department_id) ON DELETE CASCADE
)

CREATE TABLE item_instances (
     item_instances_id INTEGER UNIQUE NOT NULL,
     item_template_id INTEGER NOT NULL,
CONSTRAINT item_instances_pkey_item_instances_id PRIMARY KEY (item_instances_id),
CONSTRAINT item_instances_fkey_item_template_id FOREIGN KEY (item_template_id) REFERENCES item_templates(item_template_id) ON DELETE RESTRICT
)


на самом деле таблиц гораздо больше, думаю будет примерно 100 и где-то 90% из них прямо или косвенно замыкаются на department_id через другие таблицы. Хотелось бы чтобы при удалении записи из таблицы "departments" записи у которых "DELETE RESTRICT" не мешали бы удалению "DELETE CASCADE", т.е. в итоге я хочу чтоб у меня остались только те записи которые "DELETE RESTRICT" и все необходимы для них записи из таблиц "DELETE CASCADE"

Надеюсь понятно выразился. Какие есть варианты, главное требование - унивирсальность, чтоб при изменение структуры базы мне не пришлось бы лазить по всему коду и вносить изменения.
...
Рейтинг: 0 / 0
DELETE CASCADE & DELETE RESTRICT
    #35757278
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это невозможно, подумайте, Вы же удаляете отдел, он исчезает и на что будут ссылаться ссылки ?

помимо ON DELETE CASCADE и ON DELETE RESTRICT есть ещё ON DELETE SET NULL и ON DELETE SET DEFAULT, может быть это то что Вам нужно ?


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
DELETE CASCADE & DELETE RESTRICT
    #35758137
expog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понимаю, значит отдел тоже не удаляется, но все что можно удалиться.
SET NULL и SET DEFAULT не подойдут так как стоит задача именно удалить все не нужные записи

Может быть какие-то механизмы чтоб построить полное дерево зависимостей и написать хранимку которая по нему пройдется и удалит все что можно? Кто-нибудь знает как получить это дерево?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / DELETE CASCADE & DELETE RESTRICT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]