1

私はeコマースサービスを提供するサイトを持っており、基本的に業界の売り手が彼らの製品を顧客に売りに出すことを可能にします。売り手は売りたい商品を選び、価格を設定します。その後、彼らは引き渡されます。

簡略化した形式で、データベースには製品と注文の情報を保存するための次の関連テーブルがあります。

Product_Info
--------------------
ID (autonumber)
name
...


Order_Head
--------------------
ID (autonumber)
CustomerID
...


Order_Line
--------------------
ID (autonumber)
OrderHeadID
ProductID
...

これは、顧客が任意の数の製品を選択してカートに追加する簡略化された注文に最適です。しかし、私は今、売り手が作成および管理する「パッケージ」を追加するという問題に直面しています。売り手は、複数の製品を1つのアイテムにグループ化し、個々のアイテムを一緒に購入するよりも安い価格で販売できます。たとえば、オレンジが15ドル、リンゴが20ドルの場合、オレンジ2個とリンゴ1個を含むパッケージの価格は35ドルになります。

ひねり、そして今私が困惑している部分は、パッケージに他のパッケージを含めることができるようにしたいと思っていることです。たとえば、売り手は3つのオレンジを含む「各種オレンジ」パッケージを作成できます。次に、2つのリンゴと1つの「アソートオレンジ」を含む「アソートフルーツ」パッケージを作成できます。

それを管理する方法は、productテーブルまたはpackageテーブルのいずれかからIDを参照できる場合にパッケージ内の製品を一覧表示する方法と、productIDが可能であるためorder_lineテーブルに製品を記録する方法の両方で混乱します。製品またはパッケージのいずれかを指している。そしてもちろん、これは効率的な方法で設計する必要があるため、データベースサーバーに不必要に負担をかけることはありません。

私は主にWeb開発者であり、これまでeコマースをあまり行ったことがありません。データベースに適用する適切なテーブルのセットとテーブルの変更について、誰かが指示を与えることができますか?それほど複雑ではないように思われるので、理由はわかりませんが、これは私を立ち往生させます。

参考までに、ColdFusion MX 7(まもなく9になります)に接続されたMySQL5.1を使用しています。

編集:

これまでの回答ありがとうございます。それらについてさらに考えるのに少し時間がかかります。それまでの間、注文プロセスは当初の想定よりも関連性が高いように思われるため、注文プロセスがどのように機能するかを明確にしたいと思いました。

私の製品はShutterflyと同じように機能します。写真家は写真を投稿し、クライアントはプリントを購入できます。写真家はすべての価格を設定するためのツールを必要とし、それがプロの撮影からのものである場合、多くの場合パッケージを提供します。フルフィルメントは、私の製品が自動的に注文を送信するラボによって行われますが、価格やパッケージなどの知識はありません。

写真家は、クライアントにx%オフまたはBOGO取引を提供するためにスペシャルを実行するオプションもありますが、私はそれを個別に処理できます。今のところ、写真家が定義したパッケージを保存する効率的で簡単な方法、パッケージ内の各製品の購入時のクライアントの画像選択(現在、order_lineミラーテーブルに保存されている)、および最終的な注文の詳細について、より懸念しています。表示とレポートをすばやく簡単に照会できるようにします。

4

2 に答える 2

2

各パッケージのメンバーであるアイテムと、パッケージに含まれる数量をリストする追加のテーブルを作成します。

テーブルPackage_Items

CREATE TABLE Package_Items (
  package_id INT NOT NULL 
  item_id INT NOT NULL,
  item_quantity INT NOT NULL DEFAULT 1,
  FOREIGN KEY (package_id) REFERENCES Product_Info (ID),
  FOREIGN KEY (item_id) REFERENCES Product_Info (ID)
  PRIMARY KEY (package_id, item_id)
);

このpackage_idProduct_Infoは、メインのパッケージアイテムである行を参照しています。 item_idパッケージメンバーである他のアイテムを指します。複数のpackage_id, item_id組み合わせがあります。

このメソッドを使用すると、Product_Infoパッケージを表す新しい行を作成できます。パッケージにアイテムを追加するために必要なのは、に対応する行を追加することだけPackage_Itemsです。追加された行Package_Itemsがパッケージ製品自体でもある場合は、追加の作業を行う必要はありません。

パッケージをそれ自体に追加しないように注意してください。

于 2012-05-09T13:01:38.907 に答える
0

これはトリッキーな一連の要件です。特に、フルフィルメントやその他の割引スキーム、または顧客がパッケージから1つのアイテムを返品して払い戻しを行うとどうなるかについて、まだ教えていないためです...

Michaelのデザインは、提供する製品の階層的な性質を保存するための優れた方法です。

次の質問は、「パッケージの価格をどこに保管するか」です。これは、すべての製品の合計ではないためです。価格を「package_items」テーブルに保存することをお勧めします。

次に、「order_line」テーブルをどのように処理しますか?3つのオプションがあります。

  • その価格でパッケージを追加します(ただし、パッケージを構成するアイテムは追加しません)。
  • その価格とパッケージを構成するアイテムをゼロの価格でパッケージに追加し、
  • パッケージの割引ラインとともに、通常価格のアイテムを追加します。

注文を履行する人がパッケージについて知っている場合は、オプション1を選択できます。ただし、顧客は、出荷メモを受け取った製品と比較すると、混乱する可能性があります。

各広告申込情報を表示したいが「パッケージ価格」を保持したい場合は、オプション2で広告申込情報を表示できます。顧客が商品を返品したい場合は、オフラインでその商品の価値を把握する必要があります。

ほとんどのスーパーマーケットのレジはオプション3を使用します。これは、商品を購入したばかりの顧客に、注文がパッケージと一致したために「ボーナス」割引を受けたことを示すための優れた方法でもあります。

注文アイテムがすべて同時に発送されない可能性がある場合は、発送メモに何を印刷するかを決定する必要があります。これは裏側の大きな苦痛であり、多くの場合、契約条件に影響します。ヨーロッパ)税。

他の種類の割引(「xを使う、yを無料にする」、「xを超える注文の10%割引」など)を提供する場合は、割引が互いに複雑になる可能性があるため、これを非常に明確に定義する必要があります。小売業者-それが彼らが通常パッケージ取引で「最も安いアイテムを無料で」提供する理由です。

于 2012-05-09T13:32:22.433 に答える