私はプロジェクトで作業していますが、私がかなり一般的な状況だと思うデザインジレンマを打つと、どのように処理しているのか教えてください。 ショップのWebアプリケーションを構築しているとします。カタログテーブルがあり、多数の行があります(例:参照データを変更して「履歴」を維持する
ID |名前|価格
- |おもちゃの車| 10 $
- |テディベア| 2 $
お支払い方法で表を注文します。 商品の購入を意味する注文の詳細に関するデータはどのように保存する必要がありますか?主な関心事は、価格変更のようなカタログ表の変更をどのように処理するかです。私が思いついた
ソリューションは、以下のとおりです。
は、カタログに類似した構造を持つテーブルORDER_DETAILSと受注テーブルと多対1の関係にあります。ユーザがsthを購入すると、必要なデータがカタログテーブルからorder_detailsテーブルにコピーされます。これは、列のすべて(または少なくともいくつか)をコピーするときに大きな記憶域を必要とし、カタログ表の列変更の場合は、変更をorder_detalsに伝播する必要があります。
もう1つのアイデアは、(データウェアハウジングから)ゆっくりと変化する次元のメカニズムを利用することです。カタログ表には次のような追加の列が必要です。
ID |名前|価格|バージョン
|おもちゃの車| 10 $ | 1
|テディベア| 2 $ | 1
|テディベア| 4 $ | 2
order_detailsテーブルとordersテーブルとの多対一の関係とカタログテーブルとの多対1の関係。この場合、order_details表には同じ数の行がありますが、列の数は少なくなります。このアプローチの欠点は、製品のバージョンを管理する必要があることです。
重複:http://softwareengineering.stackexchange.com/questions/258234/best-approach-for-an-online-store-which-changes-its-product-s-price-over-time; http://stackoverflow.com/questions/3469803/how-to-handle-price-fluctuations-in-an-invoice-application; http://stackoverflow.com/questions/11818965/how-to-properly-relate-items-to-pricing-data-taking-price-change-history-into-a – jaco0646
あなたは正しいです。私はそれのようなsthを探していたときに、ちょうどときにそれは "正しい質問"を求めるのは難しいときに設計の質問になる –