私はTSQLビューを持っています。いくつかの列を除いて、いくつかの結合を行い、すべてを接着して本来あるべき見栄えを提供するという点で、かなり基本的なものです。ただし、複雑な列のビジネス ロジックを無効にする新しい要件が発生したため、それほど単純ではない列がいくつかあるため、ビュー コードの拡張が非常に難しくなっています。
詳しくは説明しませんが、私のデータベースには次のテーブルがあります。
tblEmployment
これは、「雇用」の行で構成されます。行の列のいずれかが特定の雇用の変更 (変更としましょう) に対して変更されるたびemploymentTitle
に、現在の行が別の table にプッシュされtblEmploymentHistory
、行tblEmployment
が変更されて最新の が含まれるようになりますemploymentTitle
。
基本的に、ビューが行うことは、tblEmployment
ontblEmploymentHistory
を uniqueに結合しようとEmploymentIdentifier
することです。これは理にかなっています。
elapsedTime
ビュー内のより複雑な列は、結合された行から (つまり から) さまざまな計算を行うことにより、(行ごとに)数値を計算しようとしますtblEmployment and tblEmploymentHistory
。経過時間を取得するために、指示されたビジネス ロジックに基づいて計算を実行します。たとえば、履歴テーブルの特定の日時列のみが合計経過時間にカウントされ、その行の他の列が特定の値に設定されている場合にのみカウントされます。
新しい要件が発生したため、ビジネス ロジックは以前よりもはるかに複雑になっています。これを含めるようにビューを拡張するのは非常に面倒なので、これを含めるのは難しいと思います。ビジネス ロジックの残りの部分も存在するアプリケーション層で、これをより構造化することができると思います。
ビューをスクラップして、代わりにアプリケーションのアプリケーション層に移動するのは「正しい」ですか? 明らかに、ビューを持つことの利点は高速であることです。コードで約 100.000 行の計算を行うには、ある程度の時間がかかります。ただし、行をフィルター処理して約 10.000 にすることで最適化できます。
この問題に取り組む「標準」で最もクリーンな方法は何ですか?