Я обдумал идею функции CLR
или что-то в этом роде
сервис после успешно
вставка / обновление / удаление данных из
столы. Это даже хорошо в этом
ситуация?
Вероятно, это не очень хорошая идея, но я думаю, что это все же лучше, чем попасть в ад триггеров таблицы.
Полагаю, ваша проблема в том, что вы хотите что-то делать после каждой модификации данных, скажем, пересчитывать какое-то значение или что-то еще. Позволить базе данных отвечать за это не очень хорошая идея, потому что это может серьезно повлиять на производительность.
Вы упомянули, что хотите обнаруживать вставки, обновления и удаления в разных таблицах. Делая это так, как вы к этому склоняетесь, для этого потребуется настроить три триггера / функции CLR для каждой таблицы и заставить их публиковать событие в вашей службе WCF (это даже поддерживается в подмножестве .net, доступном на сервере SQL?). Служба WCF выполняет соответствующие действия в зависимости от полученных событий.
Лучшим решением проблемы было бы перенести ответственность за обнаружение модификации данных из вашей базы данных в ваше приложение. Это на самом деле может быть реализовано очень легко и эффективно.
Каждая таблица имеет первичный ключ (int, GUID или любой другой) и столбец отметки времени, указывающий, когда запись в последний раз обновлялась. Эту настройку вы увидите очень часто в сценариях оптимистичного параллелизма, поэтому может даже не потребоваться обновлять определения вашей схемы. Однако, если вам нужно добавить этот столбец и вы не можете разгрузить обновление отметки времени для приложения, использующего базу данных, вам просто нужно написать один триггер обновления для таблицы, обновляя отметку времени после каждого обновления.
Для обнаружения изменений приложение WCF Service / Monitoring создает локальный словарь (желательно хеш-таблицу) с парами первичный ключ / временная метка в заданный интервал времени. Используя индекс покрытия в базе данных, эта операция должна быть очень быстрой. Следующим шагом будет сравнение словарей и вуаля, вот и все.
Однако есть некоторые предостережения в отношении этого подхода. Один из них - это сумма записей на таблицу, другой - частота обновления (если она становится слишком низкой, это неэффективно), и еще одно точное определение - если вам нужен доступ к данным до изменения / вставки.
Надеюсь, это поможет.