ビジネス ロジックをアプリケーション レイヤーに限定することは、せいぜい近視眼的です。経験豊富なプロのデータベース設計者がシステムで許可することはめったにありません。データベースには、任意のソースからのデータをどのようにデータベースに格納するかを定義するのに役立つ、制約とトリガー、およびストアド プロシージャが必要です。
データベースがその整合性を維持し、新しいデータまたはデータ変更のすべてのソースが規則に従っていることを確認する必要がある場合、データベースは必要なロジックを配置する場所です。アプリケーション層に置くことは、起こるのを待っているデータの悪夢です。データベースは、1 つのアプリケーションだけから情報を取得するわけではありません。アプリケーションのビジネス ロジックは、多くの場合、インポートによって意図せずバイパスされます (古い履歴データをシステムにインポートしたい、または多数のターゲット レコードを希望する新規顧客を獲得したと仮定すると、インターフェースを介して 100 万の可能なターゲットを入力する人は誰もいません。 1 回限りの問題 (すべての製品の価格を 10% 引き上げるなど) を修正するために、クエリ ウィンドウで行われた変更によってもバイパスされます。データの変更に適用されるはずのアプリケーション レイヤー ロジックがある場合は、そうではありません。アプリケーション層に配置しても問題ありません。データベースに悪いデータを送信してネットワーク帯域幅を浪費することは意味がありませんが、データベースに配置しないと、遅かれ早かれデータの問題が発生します。
これらすべてをデータベースに保持するもう 1 つの理由は、ユーザーが詐欺を犯す可能性があることです。すべてのロジックをアプリケーション層に配置する場合は、ユーザーにテーブルへの直接アクセスを許可する必要があります。すべてのロジックをストアド プロシージャにカプセル化すると、ストアド プロシージャで許可されていることだけを実行するように制限できます。財務記録や個人情報 (健康記録など) を格納するデータベースへのユーザーによるアクセスを許可することは考えません。2 人のデータベース管理者以外の誰もが、いかなる形や形式でも生産記録に直接アクセスすることを許可しないからです。 . 多くの開発者が認識しているよりも多くの詐欺が犯されており、設計時にその可能性を考慮している開発者はほとんどいません。
大量のデータをインポートする必要がある場合、データ アクセス レイヤーを通過すると、データベースが処理するように設計されたセットベースの操作を利用できないため、クロールへのインポートが遅くなる可能性があります。