5

請求アプリケーションでは、次のことを考慮してください。

製品の価格も含む製品テーブルがあります。次に、請求書とinvoice_lines テーブルがあり、各請求書明細で、製品 ID と数量を参照します。この場合、製品の価格を請求明細行に保存していません。

数か月後、製品の価格が変更された場合、製品が実際に販売された価格ではなく、現在の価格に基づいて販売量がレポートに表示されます。

私の頭に浮かんだ 1 つの解決策は、各製品にリンクする価格という名前の別のテーブルを保持し、製品の価格が変更されるたびに、この価格テーブルにレコードが挿入されることです。このテーブルの最新のレコードは、常に新しい請求書の現在の価格と見なされます。各請求明細行は、後でレポートに正しく表示されるように、価格の ID を示すことでその価格を示します。

このような状況を処理するためのベスト プラクティスは何ですか?

4

3 に答える 3

5

私は、実際の名前、数量、価格を各注文商品に対して常に保存し、データを効果的に非正規化します。注文は時間のスナップショットであり、変更可能なものに関連付けるべきではありません。価格が変動するだけでなく、元の製品を削除または名前変更し、請求書が元の製品に関連付けられた場合はどうなりますか?

于 2010-08-12T16:29:41.167 に答える
1

請求明細行に価格フィールドを追加します。

于 2010-08-12T16:26:49.710 に答える
1

私はあなたの提案をエコーし​​ます:価格をこれらの列を持つ別のテーブルに分割します:

PriceId、ProductId、Price、StartDate、EndDate。

このようにして、将来の価格変更についても前もって計画することができます。現在のデータは (Sql Server 構文) を使用して取得できます。

SELECT *
FROM Products
   Inner Join Prices ON Products.ProductId = Prices.ProductId 
      And GetDate() Between StartDate and EndDate
于 2010-08-12T18:09:01.433 に答える