2011-12-20 7 views
10

私はeコマースサイトを構築しており、限られた期間、特定のアイテムの割引を提供したいと考えています。データベースのアイテムの割引をモデル化する方法は?

マイProductテーブル(MySQLは)次のようになります。アイテムを取得するための

 
Deals 
- dealID 
- productID (Foreign Key) 
- discount (fractional value: percentage) 
- description 

 
Product 
    - productId 
    - Name 
    - Weight 
    - Price (price as on the cover of the item) 

は、私が取引のために別のテーブルを作るべき

  • Q1:すべての検索productID =すべての商品IDの商品の商品
  • Q2:取引テーブルからの割引との価格を更新し
  • Q3:すべての製品

を返すが、これを行うには良い方法はありますか?また、限定された時間だけ取引のケースをどう扱うことができますか?

EDIT: 商品ごとにどのくらいの割引を表示したいですか?したがって、私は与えられた期間の製品、元の価格と割引価格の2つの値が必要です。

私が割引列に小数点を使用するのcrontab here

答えて

8

Dealsテーブルに開始タイムスタンプと終了タイムスタンプを追加することをお勧めします。そうすれば、現在の日付が取引の開始日と終了日の間であることを確認することができます。

お客様のDealsテーブルには、実際にはdealIDは必要ありません。productIDと割引の開始日を入力してください。また、商品の価格がどれくらい高いかによって、フィールドを十分に正確なものにしてください(DECIMAL 12,8など)。それは私だったら

、私は実際にProductテーブルのオフ価格を残し、Dealsテーブルを作成するのではなく、ProductPricingテーブルを作成します。そのProductPricingテーブルはキーフィールドとしてproductIDと開始タイムスタンプで構成され、その価格がいつ変更されたかを示す終了タイムスタンプもあります。そして、もちろん、商品の価格。

+0

の商品価格表では、取引テーブルは必要ありません。日付は重要です。 – Randy

+1

@Randy:なぜ「お得な表を作成するのではなく」と言ったのですか? ;) – Crontab

+0

@Crontab ProductPricingのアプローチは、取引/プロモーション(価格の上昇など)に由来していない商品に対して価格調整を可能にするという追加の利点があるため、素晴らしい解決策です。最後の価格変更の理由をProductPricingテーブルに保存することもできます。 –

1

によって提案されたソリューションへのフォローを掲載。

オフ

価格価格*割引= $額 - $量オフあなたは有効期限欄に入れ、そして唯一の有効期限が切れていない行を返すことができ、限られた時間のためにカート

中=価格。

2

もう一つ考慮すべきことは、特定のアイテムに対して割引がない場合の状況をどのようにモデル化するかです。ここではNull Objectパターンを使用することができます - 基本的に、製品が作成されると、0%割引と無制限の時間でその製品に取引を追加します。そうすれば、商品検索ロジックを簡略化できます(クエリの外部結合なし、価格計算のためのifはありません)。

0

私はdiscountPrice、discountPercentage、テーブルの製品 にendDiscountDate列を追加し、あなたがendDiscountDate

チェックすることにより、正しい価格 を選択することができたときに、テーブルを結合する必要はありません選択し

を追跡割引を保つために、テーブルの割引の履歴を作成します

関連する問題