MSSQL 2005 が実行されている Windows 2003 ボックスを用意します。前日に作成された新しい/変更された SalesOrder が毎朝入力されるデータベースがあります。データベースには、SalesOrder、SalesOrderItem、SalesOrderItemBom という複数のテーブルがあります。それぞれに対応するバージョン テーブル (つまり、SalesOrderVersion、SalesOrderItemVersion、SalesOrderItemBomVersion) があり、まったく同じフィールドがありますが、2 つの追加列 VersionStartDate、VersionEndDate があります。バージョン非対応のテーブルには最新のデータがあります。
また、VersionStartDate はバージョン テーブルの PK の一部です。たとえば、SalesOrder には PK として OrderID があり、SalesOrderItem には PK として VersionStartDate、OrderID があります。
バージョン テーブルの仕組みの簡単な例:
販売注文
OrderID、金額 1、100 2、200
販売注文バージョン
VersionStartDate、OrderID、VersionEndDate、Amount 20090101 13:00:00、1、20090103 08:00:00、50 20090103 08:00:00、1、99991231 00:00:00、100 20090101 09:00:00、2、 20090105 15:00:00, 300 20090105 15:00:00, 2, 99991231 00:00:00, 200
SalesOrder の行が変更されるたびに、SalesOrderVersion の現在の行 VersionEndDate が更新され、VersionEndDate 99991231 の新しい行が SalesOrderVerion に挿入されます。
注: SalesOrderItem のレコードが変更された場合、必ずしも SalesOrder の「親」レコードが変更されるとは限りません。
販売の傾向と日々の増加を示すレポートを作成するように依頼されました。頭のてっぺんから、SalesOrder、SalesOrderItem、SalesOrderItemBom の 3 つのスナップショット テーブルを作成することを考えていました。これは、当日の「最新データ」をキャプチャし、増分スナップショットを作成して傾向を示します。より多くのディスク容量を必要とすることに加えて、バージョン テーブルを結合するストアド プロシージャを実行する場合と比較して、この方法には欠点があります。これは、長くて高価なクエリのようです。
考えや推奨事項はありますか?