0

ショッピング バスケット クラスを作成していますが、色、サイズなどの未設定のオプションを製品に持たせたいと考えています。

オプション データを格納するために複数のテーブルを使用する必要があることはわかっていますが、その方法がわかりません。これまでのテーブル構造は次のとおりです。

CREATE TABLE IF NOT EXISTS options (
        ID varchar(40) PRIMARY KEY,
        Option int,
        Value varchar(100),
        Cost decimal(10,2)
        );

CREATE TABLE IF NOT EXISTS products (
        ID int PRIMARY KEY AUTO_INCREMENT,
        Title varchar(200),
        Description text,
        Specification text,
        Price decimal(10,2),
        CategoryID int,
        Weight int,
        OptionID int,
        Discount int(2),
        Featured boolean,
        Images text,
        Stock int,
        Related text,
        Offer boolean,
        OfferDetails text,
        Language int
        );
CREATE TABLE IF NOT EXISTS basket (
        `ID` int(11) PRIMARY KEY AUTO_INCREMENT,
        `ProductID` int(11),
        `Quantity` int(11),
        `OptionID` int(11),
        `Cookie` varchar(40)
        );

すべてのオプションをオプション テーブルに保存し、それらを 1 つの一意の ID で製品にリンクしたいと考えています。

ユーザーがオプションを選択したときに情報を保存するために別のテーブルが必要だと思います。次に、このテーブルを使用して選択オプション データを取得し、バスケットに出力します

また、同じ製品、つまり同じオプションと productID が既にバスケットにあるかどうかを確認できる必要があるため、新しい行を追加する代わりに数量を簡単に更新できます。

大量の for ループとクエリを使用してそれを行うことができますが、実際にはそれを制限したいと考えています。

不明な場合は申し訳ありません。

前もって感謝します

4

1 に答える 1

0

顧客用に別のテーブルがあると仮定しています。オプションは製品に適用されます。各製品に 1 つ以上のオプションを設定できます。これは多対 1 の関係です。ユーザーごとに複数の製品を持つことができます。これも多対 1 の関係です。これらを関係的に分割することができます(すべきですか?)。

このテーブル (purchase例として呼び出します) は、(少なくとも) 以下に対応する列を保持します。

primary key,
customer ID,
product ID
amongst other things.

これに関する最初の問題は、オプションが 0 個以上ある可能性があることです。そのためには、別のテーブルが必要です (optSel例として呼び出します)。これには、以下に対応する列があります (少なくとも)。

purchase table primary key, 
option id, 
and other things.

オプションが選択されると、そのoptSelテーブルにスローできます。これは後で結合によって簡単にアクセスできます。これにより、オプションとユーザーおよび製品がリンクされます。もちろん、別の方法で分割することもできます。これは 1 つの手法の 1 つの例にすぎません。

于 2012-11-29T12:14:49.927 に答える