個々の部品ごとに在庫データを追跡するテーブルがあります。これはテーブルの簡略化されたバージョンです (一部の非キー フィールドは除外されています)。
UniqueID,
ProductSKU,
SerialNumber,
OnHandStatus,
Cost,
DateTimeStamp
特定のピースに何かが起こるたびに、新しい監査レコードが作成されます。たとえば、私の製品 ABC が初めて在庫に追加されたとき、次のようなレコードが得られます。
1, ABC, 555, OnHand, $500, 01/01/2009 @ 02:05:22
ABC シリアル番号 555 のコストが変更された場合、新しいレコードが取得されます。
2, ABC, 555, OnHand, $600, 01/02/2009 @ 04:25:11
作品が売れた場合、さらに別の記録が得られます。
3, ABC, 555, Sold, $600, 02/01/2009 @ 5:55:55
ABC の新しい作品が持ち込まれた場合、次の記録が得られます。
4, ABC, 888, OnHand, $600, 02/05/2009 @ 9:01:01
任意の時点での特定の製品セットの手持在庫値をできるだけ早く取得できるようにする必要があります。
上記の例を使用して、2009 年 1 月 2 日現在の製品 ABC の在庫値を取得したい場合、一意の製品/シリアル番号の組み合わせごとに、01/03/より前の最新のレコードを 1 つ選択する必要があります。 2009 を "OnHand" の状態にしてから、コストを合計します。(現時点では、この select ステートメントがどのようになるかは 100% わかりませんが、少し実験してみます)。
私の質問:これは、私が説明しているタイプの監査テーブルにとって適切な構造ですか? つまり、適切に索引付けされていれば、高速なクエリに適していますか? (このテーブルが数百万行に増えたらどうなるか想像しようとしています。)
過去のレコードを別のテーブルに分割し、「アクティブな」テーブルの ProductID/SerialNumber の組み合わせごとに最新のレコードのみを残す必要がありますか?
フィードバック/提案/コメント/リンクは大歓迎です。
ありがとう!