web-dev-qa-db-ja.com

レポートのアイテム価格変更の処理方法

Sql Server 2008-R2を使用してPOSソフトウェアを構築しています。現在、価格が変更された複数のアイテムを処理する方法について混乱しています。

2019年9月10日のペプシの価格が2.0ドルであるとしましょうが、今日の価格は2.50ドルに変更されています。今後数日になる可能性があり、価格は再び変更され、2.00ドルに戻ります。

だから月末にアイテムの毎月のレポートが必要なとき。次に、このような状況にどう対処するか。現在の価格か、10日前の価格か、両方の価格の平均を確認しますか?

すべてのアイテムの価格変更を追跡し、レポートのために特定の日付の各アイテムの価格をクエリするには、別のテーブルが必要ですか?

この種の状況に対処するための専門家によると、最善のアプローチは何ですか?

どんなガイダンスも本当に感謝します。

3
Jaa Zaib

価格設定に関する時系列データを格納するには、データベースを適切に設計する必要があります。

これは、あなたの店がいつ何を提供しているかを知り、それを販売と対比するので、あなたがアイテムをどのように販売しているかを問い合わせるのをサポートします。また、事前に価格を設定できるので、セールではすべての価格が指定された時間に即座に(または最後に再び)変更されます。


Product(ProductGuid, Name, ...)
Price(PriceGuid, ProductGuid, PricePerUnit, EffectiveFromDate, EffectiveTillDate, ...)
Receipt(ReceiptGuid, Total, ....)
ReceiptLine(ReceiptLineGuid, ReceiptGuid, PriceGuid, Amount)

および/または...

製品とその販売価格を記録する必要があります。

これは、監査人にとっては特に便利です(特に、各Receipt/ReceiptLineレコードが1回書き込まれる場合)。また、明日製品が削除された場合でも、レシートは通貨情報を維持するという点で優れています。


Product(ProductGuid, Name, PricePerUnit, other Details....)
Receipt(ReceiptGuid, Total, ....)
ReceiptLine(ReceiptLineGuid, ReceiptGuid, ProductGuid, Amount, PricePerUnit, ...)

2
Kain0_0

各注文に対してアイテムが販売された価格を記録する必要があります。それに対してレポートします。 [〜#〜]いけない[〜#〜]レポートでの価格の予想を計算します。

  1. いずれにしても、これは基本的な監査と会計に必要です。

  2. アイテムの販売価格が正しくなかった可能性があります。多分それまでは価格の更新を取得しませんでした。

  3. 価格計算ロジックは、レポートで実行できるよりも簡単に複雑になる可能性があります。たとえば、1つ買うと1つ無料、木曜日は10%オフ、壊れたアイテムは割引になります。などなど

  4. それはあなたのレポートを正確かつ超シンプルにします。 select sum(price), product from orders group by product

4
Ewan

一般に、企業は製品を販売しません。 offersを販売しています。

オファーは、製品に関連付けられた不変のエンティティーであり、とりわけ、開始日時と終了日時、および価格または価格構造が含まれています。さらに、チャネル(インターネットまたは小売店で販売)、課税対象地域/地方自治体、手数料体系など、他の属性が含まれる場合があります。

作成されたオファーは永久に存在しますが、「非売品」としてマークを付けて、販売することはできません。したがって、「製品価格の変更」のプロセスは、実際には「newオファーを新しい価格で導入すること」です。古いオファーはデータベースに保持されますが、「販売されなくなりました」とマークされ、すべての製品ページで非表示になります。

レポートで使用するのは、製品レコードではなくオファーレコードです。価格は決して変わらないため、レポートの問題は効果的に解消されます。

2
John Wu

製品を注文の日時に基づいて異なる価格にできるようにデータベースを構成しますが、レポートを簡単にするために、また誰かが誤ってデータを破損しないように保護するために、注文明細テーブルに非正規化された価格のスナップショットも使用します古い価格検索を更新します。

Product (id, name)
ProductPriceSchedule (productId, price, startDate, endDate [nullable] )
Order (id, orderDatetime) // allows for back-dating to get older price
OrderLineItem (productId, orderId, priceAtTimeOfOrder [denormalized])
1
Graham