私は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ミラーテーブルに保存されている)、および最終的な注文の詳細について、より懸念しています。表示とレポートをすばやく簡単に照会できるようにします。