データベースは非常に大きなオブジェクトと考えてください。データベースを呼び出すたびに、論理的に一貫した状態になっている必要があります。
データベースはテーブルを介して公開され、テーブルと行の一貫性を保つにはトリガーを使用できます。一貫性を保つもう 1 つの方法は、テーブルへの直接アクセスを禁止し、ストアド プロシージャとビューを介してのみ許可することです。
トリガーの欠点は、どのアクションでもトリガーできることです。これは強みでもあります。無能さによってシステムの完全性を台無しにする人は誰もいません。
対照的に、ストアド プロシージャとビューを介してのみデータベースへのアクセスを許可すると、アクセス許可のバックドア アクセスが許可されます。十分な権限を持つユーザーは、データベースの整合性を損なうことはないと信頼されており、その他のすべてのユーザーはストアド プロシージャを使用します。
作業量の削減に関して: データベースは、外部の世界を処理する必要がない場合、驚くほど効率的です。プロセスの切り替えでさえパフォーマンスがどれだけ低下するかに本当に驚かれることでしょう。これは、ストアド プロシージャのもう 1 つの利点です。データベースへの多数の呼び出し (および関連するすべてのラウンド トリップ) ではなく、1 回です。
単一のストアド プロシージャにまとめることは問題ありませんが、問題が発生した場合はどうなるでしょうか。5 つのステップがあり、最初のステップが失敗したとします。他のステップはどうなりますか? その状況に対応するには、そこに大量のロジックを追加する必要があります。それを開始すると、そのシナリオでのストアド プロシージャの利点が失われます。
ビジネス ロジックはどこかに行かなければならず、データベースの設計には多くの暗示的なドメイン ルールが組み込まれています。たとえば、ユーザーは 1 つのパスワードしか持つことができないなどと言って、ビジネス ルールを成文化しようとする関係や制約などがあります。これらの関係などを設定することでビジネス ルールをデータベース サーバーに押し込み始めた場合、どこに線を引きますか? データベースがデータの整合性に対する責任を放棄し、呼び出し元のアプリとデータベース ユーザーを信頼して正しく処理するようになるのはいつですか? これらのルールが埋め込まれたストアド プロシージャは、多くの政治的権力を DBA の手に委ねることができます。最終的には、n 層アーキテクチャに存在する層の数に依存します。プレゼンテーション、ビジネス、データ層がある場合、ビジネスとデータの分離はどこにありますか? ビジネス層はどのような付加価値をもたらしますか? ビジネス層をデータベース サーバー上でストアド プロシージャとして実行しますか?
はい、トリガーをバイパスする必要があるということは、「間違ったことをしている」ことを意味すると思います。この場合、トリガーはあなたのためではありません。
