問題は、SQLServer2012上のSQLについてです。
バックグラウンド:
エンティティと呼ばれるエンティティがあります。
エンティティはNEntityVersion(1:n ) を持つことができます。
EntityVersionは承認される場合とされない場合があります。承認されると、バージョン全体で属性ApprovedBy
が割り当てられます。
要件:
すべてのエンティティの最新のエンティティバージョンを一覧表示する必要がありますが、各エンティティの最新の承認済みバージョンのみを一覧表示します。
問題:
大規模なソリューションのクエリ全体を実現するための最適な方法を見つける必要があります。
そのため、私は2つの可能なアプローチを考えました。
EntityVersionのIsLastフラグ列。新しいバージョンが追加されるたびに、トランザクション全体が
true
新しく追加されたバージョンに設定され、以前の最後のバージョンに。が割り当てられfalse
ます。すべての新しいエンティティバージョンの挿入を処理し、最新バージョンのみを持つ特別なテーブルに新しいバージョンを追加するトリガー。新しいバージョンが追加されるたびに、前のバージョンは特別なテーブル全体から削除されます。つまり、
SELECT
リスト全体を取得するのは非常に安価です。
質問:
最適で有効なアプローチは何でしょうか?他に何か考えていることはありますか?
ありがとう!
「最適」とは、スケーラブルであり、何百万ものレコードで機能することを意味することに注意してください。
アップデート
回答の一部のユーザーがとのスキーマを要求していることがわかったので、Entity
それらEntityVersion
をより適切に説明します。
エンティティにはテキスト情報はありません。識別子と他のエンティティとの関係だけです。
EntityVersionには、テキストおよびその他の情報があります。例:タイトル、説明、作成者...からの重複情報がないことを言及することが重要です。
EntityVersion
Entity
SELECT DISTINCT
最も簡単な解決策は、個別の列を定義し、同じクエリで他の列を選択できるようなものを用意することです。悲しいことに、私が知る限り、これはSQL Serverでは不可能です(私は間違っていますか?)。