Вопрос об уменьшении логики множественных триггеров (SQL Server 2008) - PullRequest
1 голос
/ 10 января 2011

Справочная информация:

У меня есть веб-сайт (ASP.NET MVC), где пользователи могут писать / редактировать / удалять «рецензии». Для этого необходимо запустить триггер базы данных, чтобы обновить глобальную статистику в системе.

Таблицы базы данных:

  • Отзыв (родительский)
  • MetaData1 (обзор 1 - 0..1 MetaData1)
  • MetaData2 (обзор 1 - 0..1 MetaData2)
  • MetaData3 (обзор 1 - 0 .. * MetaData3)

Итак, Review - это главная таблица (ReviewId - идентификатор), а остальные - метаданные.

Проблема:

У меня есть хранимая процедура, которая выполняет расчеты, которые необходимо вызывать всякий раз, когда рецензия создается / редактируется / удаляется.

На данный момент у меня есть триггер, который вызывает SP на всех таблицах (4 идентичных триггера). Но это приводит к тому, что хранимая процедура выполняется, возможно, 4 раза, когда это нужно сделать только один раз.

Я не могу просто поставить его только на просмотр, потому что, если пользователь редактирует метаданные для обзора, таблица обзора не будет затронута и, следовательно, триггер не сработает.

Мне нужен способ сказать: «Следите за всеми этими таблицами на предмет активности, когда запись создается / редактируется / удаляется, запустите эту процедуру один раз».

Какие-нибудь советы / предложения / идеи?

К вашему сведению - я использую Entity Framework 4 для операций CRUD, если это имеет значение.

Ответы [ 2 ]

1 голос
/ 10 января 2011

Триггеры удаления на 3 таблицах MetaDataX. После сохранения записей метаданных действительно измените что-то (время «последнего редактирования» было бы хорошим кандидатом) в таблице обзора.

Возможно, вы захотите написать некоторые прокси-методы для реализации описанной выше логики в классе сопоставления Review для управления объектами метаданных (и не использовать объекты сопоставления MetaDataX напрямую).

0 голосов
/ 10 января 2011

Избавьтесь от структуры сущности и триггеров.Создайте хранимую процедуру, которая обновляет четыре таблицы, и вызывайте ее со своей веб-страницы.

...