私はあえてあなたの質問に答えようとします。しかし、あなたが望んでいた答えが得られるかどうかはわかりません...
90 年代初頭に、ボーランドが自社のデータベース Interbase で「コールバック」というこの壮大な新機能を宣伝したときのことを覚えています。これは、データベースが「アクティブ」になる可能性があるという約束がなされた非常に気の利いた新しい技術を介して発信者 (Delphi) に「通知」を提供します。 '。
これは後に「時間の無駄論」として知られるようになりました。
これが採用されなかった理由は、おそらく DBMS の概念が非常に有望に見えた一方で、データベースは階層の 1 つであり、水平方向にはスケールアップすることしかできないからだと思います。
したがって、プログラミング言語が助けになります。というか、サービス指向アーキテクチャ (SOA) の考え方です。多くの人が SOA を「Web サービス」と混同していますが、これは実際にこの新しい概念に盛り込まれた誇大広告でした。
しかし、Fiefdom/Emissary 設計パターン (またはよりクールでプロフェッショナルに聞こえるように名前を変更した Master/Agent パターン) を調べると、主なアイデアはそのリソース (データベースの読み取り) を排他的に制御し、すべての呼び出しが1 つのデータ アダプターを介して集中的に送信されます。
明らかに、そのような設計は、トリガーやコールバック フレームワークではまったく機能しません。
しかし、デザイン全体を再考する必要があると思います。おそらくEntity Frameworkを使用し、おそらくその上にキャッシュメカニズムを使用して、単一の「DataLayer」を介してすべてのアクションとすべての呼び出しをファネルすると、メッセージを食物連鎖にバックアップするためにデータベースに依存する必要がなくなります。
「データベース中心」になるといかに奇妙なことが起こり得るかを示すために、電子メールを送信しない方法の極端な実際の例を示します。これは、私があまり感心していなかったコーダーによってずっと前に書かれたものです。
事実 1: Sql Server は電子メールを送信できます。
事実 2: Asp3 コーダーは、VbScript でこれを実行できるかどうか、またはその方法を知りません。
Asp3: テキスト ボックスの電子メール アドレスを読み取り、com+ レイヤーに送信する
Com+: メールアドレスを受け取り、データレイヤーに転送する
Datalayer: 電子メール アドレスを取得してストアド プロシージャに転送する
Sproc: メールアドレスを受け取り、SQL 関数に転送する
関数: 電子メール アドレスに @ が含まれていることを確認するために、奇妙な部分文字列処理を実行します。初期化。true または false を返します。
Sproc: 1 列と 1 または 0 を含む 1 行のレコードセットを返します
Datalayer: テーブルをそのまま返します。
Com+: 値が 1 または 0 の最初の列と行を true または false に変換します
Asp3: true の場合、電子メールの件名と電子メールのテキストを含む電子メール アドレスを com+ に送信します。
Com+: 正確な情報をデータレイヤーに送信します
Datalayer: ストアド プロシージャを呼び出します。
Sproc: SQL 関数を呼び出します...
関数: SQL サーバーの電子メール エージェントを使用して電子メールを送信します。
ここまで読んだ場合、SQL Server にテーブル、リレーション、インデックス、およびトランザクションを管理させることをお勧めします。それがとても上手です。これらのタスクを超えるものはすべて、ストアド プロシージャにカーソルを含めますが、適切なコードを使用することでより適切に処理できます。