1

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 つのスナップショット テーブルを作成することを考えていました。これは、当日の「最新データ」をキャプチャし、増分スナップショットを作成して傾向を示します。より多くのディスク容量を必要とすることに加えて、バージョン テーブルを結合するストアド プロシージャを実行する場合と比較して、この方法には欠点があります。これは、長くて高価なクエリのようです。

考えや推奨事項はありますか?

4

1 に答える 1

1

ここには「依存」がたくさんあります。ここにいくつかの議論のアイデアがあります。

データがロードされるのは朝だけですか? これは、1 日の間にデータが変更されないことを意味するため、長時間の高価なクエリによってロックやブロックの問題が発生することはありません。このデータベースはレポート作成のみに使用されますか? そうでない場合 (データが 1 日を通して更新される場合)、要件をサポートするために、データの追加の冗長コピーが必要になる場合があります。

新しいレポートはどのくらいの頻度で実行されますか? 特定の日に何度も実行するのか、それとも 1 回か 2 回だけ実行するのか。「時間集計された」データに何度もアクセスする場合は、冗長コピー (スナップショット) を作成する価値があるかもしれませんが、レポートが 1 回または 2 回実行されてからダンプされる場合はわかりません。私が気にすること。

パフォーマンスはどれほど重要ですか? Phb がボタンを押してから 2 ~ 3 秒以内にレポートを生成して完了する必要がありますか? (間)いいえ、本当に、特に彼らに費用をドルで説明すると(余分なハードドライブ容量、余分なバックアップ容量、準備とバックアップと復元のための余分な時間、データの肥大化から生じるその他のステルスコスト). 1 日 1 回のレポートを数分待つことができる場合は、料金を安くします。(より複雑なコードを記述するための初期費用はまだかかりますが、それが完了したら完了です。 )

反対に、1 日のデータが読み込まれた後にその日のレポートを生成するルーチンを追加し、その 1 つのデータ セット (または過去 1 週間、4 週間などのデータ セット) のみを保持することには、大きな魅力があります。彼らがその 5 分間のレポートを実行することがわかっている場合は、午前中に開始して、彼らが入ってきたときに準備できるようにします。

これらはすべて、運用要件の推測に基づいています。私が言ったように、あなたが持っているものと必要なものに大きく依存します.

于 2009-11-10T15:31:53.750 に答える