0

私は3つの列を持つテーブルを持っています:

user varchar、status varchar 、rep int

ステータスと担当者は頻繁に更新され、要件の 1 つは次のとおりです。

指定された日時の値を指定すると、指定された日付の各ユーザーのステータスと担当者の値が表示されます。

update_at datetime 列をテーブルに追加し、既存の行を更新する代わりに同じユーザーの新しい行を挿入できますが、テーブルが大きくなり、クエリ結果を他のテーブルからの同様の結果に結合する必要があるため、高速なクエリが必要です.

SQL Server でこの問題を解決するのに最適なソリューションは何ですか?

4

3 に答える 3

1

レポート情報の正確な使用方法によっては、メイン テーブルを更新する前に履歴テーブルを作成し、現在の値を履歴テーブルに書き込んで、タイムスタンプを追加するのが最適な場合があります。

履歴から特定の日/ユーザー/ステータスのみを実際に選択する場合は、これが最適です

于 2008-10-29T13:47:59.577 に答える
0

ほとんどの場合、参加時に現在のステータスのみを照会すると想定しているため、これは別の関連テーブルとして保存します。このタイプのクエリを多数実行し、このタイプのデータをこのテーブルだけでなく多くのテーブルに追加する場合は、レポート用に別の OLAP データベースを作成します。

ちなみに、これを行っている限り、誰が変更を加えたかを記録するかどうかを検討することもできます。次に、基本的に監査ソリューションを構築しました。

于 2008-10-29T13:51:33.373 に答える
0

これに対する 1 つのオプションは、「現在の値」テーブルと履歴テーブルの 2 つの別個のテーブルを使用することです。現在の値のテーブルには、各ユーザーの最新の値のみが含まれるため、サイズが小さくなり、簡単に結合できます。履歴テーブルには、リストした 3 つの列とタイムスタンプ列が含まれ、時間の経過に伴う値の変化を追跡します。現在の値テーブルの値を変更したいときはいつでも、gettime() をタイムスタンプとして使用して、新しい値を含む行を履歴テーブルに同時に追加します。

于 2008-10-29T13:51:38.147 に答える