おそらく、割引に関する基本的な情報 (一意の識別子や説明など) を保持するある種の「割引」テーブルを作成する必要があります (これは、この割引をトリガーするために必要な適格性ルール (プロモーション コードなど) にリンクすることもできます)。
このテーブルには、例が機能するための割引バンドルを作成するためのルールも保持する必要があります。たとえば、「割引をトリガーするために必要な製品の数」や「バンドルの値」などです。柔軟性のために、これらのフィールドは NULL 可能にする必要があります。バンドルを使用する必要があります。「割引する製品」テーブルで決定された個々の価格を使用できます。
基本的な例として、次のような割引テーブルがあるとします。
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |
... そして、次のような product_to_discount リンク テーブル:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |
次に、製品をディスカウントにリンクします。「この範囲から 3 つのアイテムをわずか 10 ポンドで購入する」のようなものがある場合は、対象となる可能性のある製品の全範囲をディスカウントにリンクし、units_required
を 3に設定する必要があります。次に、それらのアイテムのいずれか 3 つが「バスケット」にある場合は、 を適用しbundle_price
ます。
複数の可能性がある場合は、どのバンドルが優先されるかを選別するために、フィルタリングを行う必要があるかもしれません (おそらく、どれが最大の割引を与えるかを計算することによって)。
このような設定のもう 1 つの可能性は、はるかに単純な割引を行うこともできるということです。1 つの製品だけをディスカウントにリンクするunits_required
だけですbundle_price
。NULL
さまざまな値でさまざまな値下げを何度も行う可能性product_to_discount.units_required
があります。そのため、単一の製品に割引値を設定したり、大量の商品に対してより大きな割引を設定したりできます。
product_to_discount.product_is_discount
「X、Y、または Z を購入して Q を無料で入手」のようなことをしたい場合は、フィールドに追加することもできます。
これはかなり漠然とした概要ですが、「正しい」方向に向けるのに役立つことを願っています...
ああ、心に留めておくべきもう1つのことは、システムが会計を行っている場合、予想される製品価格と割引価格の間の不一致を説明するために「割引ライン」を渡す必要があるということです.