Осмелюсь попробовать ответить на ваш вопрос. Но я не уверен, что вы получите ответ, на который надеялись...
Я помню еще в начале 90-х годов, когда Borland продвигала эту грандиозную новую функцию «обратных вызовов» в своей базе данных Interbase, которая давала вызывающей стороне (Delphi) «уведомления» с помощью какой-то очень изящной новой технологии, где было обещано, что база данных может быть «активной». '.
Позже это стало известно как «теория пустой траты времени.
И я думаю, почему это так и не сработало, возможно, потому, что, хотя концепция СУБД выглядела очень многообещающе, база данных — это один из ваших уровней, который вы можете масштабировать только горизонтально, а не горизонтально.
Так что языки программирования в помощь. Вернее, идея сервис-ориентированной архитектуры (SOA). Многие путают SOA с «веб-сервисами», что действительно было частью этой новой концепции.
Но если вы посмотрите на шаблон проектирования Fiefdom/Emissary (или шаблон Master/Agent, переименованный, чтобы он звучал более круто и профессионально), вы обнаружите, что основная идея заключается в монопольном контроле его ресурсов (читай баз данных) и что все вызовы направляются через один единственный адаптер данных.
Очевидно, что такой дизайн вообще не работает ни с триггерами, ни с какими-либо фреймворками обратного вызова.
Но я думаю, вам следует пересмотреть весь ваш дизайн. Если вы направляете все действия и все вызовы через один «DataLayer», возможно, используя Entity Framework и, возможно, вдобавок к этому механизм кэширования, вам не придется полагаться на свою базу данных для пересылки сообщений в пищевую цепочку.
Чтобы показать, насколько странными могут быть вещи, когда они «ориентированы на базу данных», вот очень реальный живой пример того, как не отправлять электронное письмо, написанное давным-давно кодером, который меня не очень впечатлил:
Факт 1: Sql Server может отправлять электронные письма.
Факт 2: Кодировщик Asp3 не знает, можно ли и как это сделать в VbScript.
Asp3: прочитать адрес электронной почты текстового поля, отправить на уровень com+
Com+: взять адрес электронной почты и отправить на уровень данных
Datalayer: возьмите адрес электронной почты и перешлите в хранимую процедуру
Sproc: возьмите адрес электронной почты и перешлите в функцию sql
функция: делать странные вещи с подстрокой, чтобы проверить, что адрес электронной почты имеет @ . в этом. вернуть истину или ложь.
Sproc: вернуть набор записей с одним столбцом и одной строкой, содержащей 1 или 0
Уровень данных: вернуть таблицу как есть.
Com+: преобразовать первый столбец и строку со значением 1 или 0 в true или false
Asp3: если верно, отправьте адрес электронной почты с темой и текстом электронной почты на com+
Com+: отправляет точную информацию на уровень данных
Уровень данных: вызывает хранимую процедуру.
Sproc: вызывает sql-функцию...
функция: использует почтовый агент SQL Server для отправки электронной почты
Если вы дочитали до этого места, мой совет — позволить серверу sql управлять таблицами, отношениями, индексами и транзакциями. Это очень хорошо. Все, что выходит за рамки этих задач, и при этом я включаю курсоры в хранимые процедуры, лучше обрабатывается с помощью надлежащего кода.
person
Michael Viktor Starberg
schedule
15.01.2013