powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Временое отключение триггера
11 сообщений из 11, страница 1 из 1
Временое отключение триггера
    #34934606
Гость74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть две таблицы в мастер-детайл. На детайл висит триггер, который проверяет, что если ни одной записи в детайл, соответвующей конкретной записи в мастер, не остается, то и из мастера тоже удалить. Другими словами - запись в главной таблице не может существовать без подчиненных.
Теперь надо сделать в одной транзакции такое действие:
1. удалить для конретной мастер-записи все дочерние записи
2. записать другие для той же мастер-записи.

Естествено при наличии триггера вторую часть я уже сделать не смогу, т.к. мастер-запись удалиться.
Вопрос. Будет ли правильным такое решение?

create procedure test
as
begin
Отключить_триггер
Удалить записи
Включить триггер
добавить записи
end
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34934688
ant74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74Теперь надо сделать в одной транзакции такое действие:
1. удалить для конретной мастер-записи все дочерние записи
2. записать другие для той же мастер-записи.

Естествено при наличии триггера вторую часть я уже сделать не смогу, т.к. мастер-запись удалиться.
Вопрос. Будет ли правильным такое решение?

create procedure test
as
begin
Отключить_триггер
Удалить записи
Включить триггер
добавить записи
endЕсли БД Oracle, то об одной транзакции говорить не приходиться, т.к. отключение/подключение триггера это DDL. Ну и сам подход, ИМХО, достаточно сомнителен.
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34934737
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74Другими словами - запись в главной таблице не может существовать без подчиненных.

Может, достаточно в мастер таблице просто добавить запись и не добавлять в подчиненную.

Интересная постановка задачи
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34934759
Гость74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обычная задача. Вы, например, пишите сообщение адесованное нескольким получателям. Само сообщение без хотя бы одного получателя существовать не может. Что здесь необычного?
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34935170
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТеперь надо сделать в одной транзакции такое действие:
1. удалить для конретной мастер-записи все дочерние записи
2. записать другие для той же мастер-записи.

Сделайте наоборот:

1. Сначала вставьте "другие для той же мастер-записи" - сохранив "куда-нибудь" их идентификаторы.
2. Удалите записи, не соответсвующие "новым" идетнификаторм.

ЗЫ. Отключение триггеров, даже в тех СУБД, где DDL транзакционных, ни есть хорошая практика.
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34938335
Leshij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо перед удаление добавить суррогатную запись в detail-таблицу, после
вставки ее грохнуть.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34938702
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74Обычная задача.
Ничего не обычная, очередной бред.
Если есть ограничение, что у мастера хотя бы одна деталь должна быть, то при удалении последней детали должна быть блокировка этой операции, а не каскадное удаление мастера. Если надо удалить все - удалять мастера.
Это если надо именно такое поведение на уровне БД.
В чем я, лично, очень сомневаюсь. Ибо если в документе надо одну строку удалить, а другую вставить, то порядок, в котором это будет сделано, вообще говоря, неважен. Добавьте еще условие, что у мастера ровно одна деталь - получите полный П.
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34938720
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74Само сообщение без хотя бы одного получателя существовать не может
Запросто. Оно не может быть отправлено . Разницу чувствуете?
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34943716
Гость74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Запросто. Оно не может быть отправлено. Разницу чувствуете

Чувствую. Только вы условие задачи до конца не знаете :-)
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34943887
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74>Запросто. Оно не может быть отправлено. Разницу чувствуете
Чувствую. Только вы условие задачи до конца не знаете :-)
Потому что его кто-то не описал до конца?
...
Рейтинг: 0 / 0
Временое отключение триггера
    #34946378
kittn2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гость74. Какие проблемы? Сделайте ХП, удалите сначала в ней записи из детайл, а потом - из мастер. Тригер отработает правильно.. Это называется - каскадное удалени. Однако это в 99% случаев нарушит объективную информацию. Не целостность базы, а именно информацию. Было что-то - и пропало. Я, как всегда, считаю, что удаление нужно только для ошибочно введенных записей. И на них ограничения по удалению обычно не распространяются. Потому что нормальный оператор удалит ошибку из мастер до того, как к нему привязали детайл.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Временое отключение триггера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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