我敢尝试回答你的问题。但我不确定你会得到你希望的答案......
我记得早在 90 年代初期,当 Borland 在他们的数据库 Interbase 中推广“回调”这一宏伟的新功能时,它将通过一些非常漂亮的新技术向调用者(Delphi)提供“通知”,其中承诺数据库可以“活跃” '。
这后来被称为“浪费时间理论”。
我猜为什么这从未发生过,也许是因为虽然 DBMS 的概念看起来非常有前途,但数据库是您只能扩展而不是水平扩展的层之一。
所以编程语言来拯救。或者更确切地说,是面向服务架构 (SOA) 的理念。许多人将 SOA 与“Web 服务”混为一谈,这确实是这个新概念中包含的炒作。
但是,如果您查看 Fiefdom/Emissary 设计模式(或重命名 Master/Agent 模式以使其听起来更酷和更专业),您会发现其主要思想是对其资源(读取数据库)进行独占控制,并且所有调用正在通过一个单一的数据适配器汇集。
显然,这样的设计根本不适用于触发器或任何回调框架。
但我认为你应该重新考虑你的整个设计。如果您通过单个“DataLayer”汇集所有操作和所有调用,可能使用实体框架,并且可能在缓存机制之上,您将不必依赖数据库将消息转发回食物链。
为了展示“以数据库为中心”时事情会变得多么奇怪,这里有一个极端的实际例子,说明如何不发送电子邮件,很久以前写的,由我印象不深的编码员写的:
事实 1:Sql Server 可以发送电子邮件。
事实 2:Asp3 编码器不知道这是否或如何在 VbScript 中完成。
Asp3:读取文本框电子邮件地址,发送到 com+ 层
Com+:获取电子邮件地址并转发到数据层
数据层:获取电子邮件地址并转发到存储过程
Sproc:获取电子邮件地址并转发到 sql 函数
功能:做奇怪的子字符串检查电子邮件地址是否有 @ 。在里面。返回真或假。
Sproc:返回一个记录集,其中一列一行包含 1 或 0
数据层:按原样返回表。
Com+:将值为1或0的第一列和第一行转换为真或假
Asp3:如果为真,则将带有电子邮件主题和电子邮件文本的电子邮件地址发送到 com+
Com+:将准确的信息发送到数据层
数据层:调用存储过程..
Sproc:调用一个sql函数...
功能:使用sql server email agent发送邮件
如果你读到这里,我的建议是让 sql server 管理表、关系、索引和事务。它非常擅长这一点。除了这些任务之外,我确实在存储过程中包含游标,通过适当的代码可以更好地处理。