0

サイトの管理者がデータベース テーブルに属性を作成できるようにするよう依頼されました。ウェブサイトには売り手と買い手がいて、それぞれの売り手は特定の製品を追加するときに、特定の製品に必要なフィールドに入力してから、製品を公開します。これがどのように機能するのか、私はちょっと混乱しています。すべての製品に特定のフィールドがある場合、サイトに 2.000 個の製品がある場合、2.000 個のテーブルがあることになりますか? 私はそのようなことに取り組んだことがないので、これを処理する方法が本当にわかりません。さらに、管理機能で属性を作成します。製品がトマトであるとしましょう。管理者は「状態」と呼ばれるトマトのフィールドを追加し、「冷凍」や「生」などのオプションがあります。その後、一部の売り手がトマト製品を作ろうとすると、トマトの状態が新鮮か冷凍かを選択する必要があります。のテキストを保持するテーブルを作成し、次に のテキストを保持する別のテーブルを作成するなど、考えられる解決策を考えました。

product_tomato ( product_id, user_id, name, description, condition)

product_select( select_id, product_id, select_text)

product_option( option_id, select_id, option_text)

それで、これは私がこれを行うためのテーブルをどのように想像したかです。したがって、管理者が製品テーブルにフィールドを追加するとき、製品テーブルに列を追加してから、prodcut_select テーブルに新しい行を作成し、product_option テーブルに可能なオプションをリストします。しかし、それを製品ページに表示する方法に戸惑いました。管理者が作成した列の名前がわからない場合、コードでどのように対処すればよいでしょうか?

4

2 に答える 2

4

質問の文言は非常に紛らわしいですが、私はあなたが言っていることの要点を理解していると信じています。

いいえ、すべての製品について表を作成するわけではありません。3 つのテーブルを持つ複数の製品に対して、これを簡単に処理できます。

Tables:

Product
Product_Attributes
Seller_Product

条件付きのトマトの架空の例を見てみましょう。

管理者は、自分のサイトでトマトを商品として提供することにしました。彼は製品を作成し、それを製品テーブルに追加します。次に、トマトには「状態」属性が必要であると判断しました。この属性には、生鮮と冷凍の 2 つの可能な値があります。したがって、3 つのフィールド (Product、Condition、Value) を含む 2 つの行を Product_Attributes テーブルに追加します。

したがって、テーブルは次のようになります。

Product Table:

*Name |*
Tomato

Product_Attribute Table:

*Product | Attribute | Value*
Tomato | Condition | Fresh
Tomato | Condition | Frozen

最後に、売り手が商品をサイト ストアなどに追加したときに、その商品の Product_Attribute テーブルから条件と潜在的な値を取得するフォームにデータを入力してもらいます。この場合、属性は 1 つしかないため、条件を埋めるだけです。生鮮トマトと冷凍トマトをそれぞれ販売する 2 人の売り手、ジムとトムがいるとします。最後の 3 つのテーブルは次のようになります。

Product Table:

*Name |*
Tomato

Product_Attribute Table:

*Product | Attribute | Value*
Tomato | Condition | Fresh
Tomato | Condition | Frozen

Seller Product Table:

*Seller | Product| Attribute | Value*
Jim | Tomato | Condition | Fresh
Tom | Tomato | Condition | Frozen

このように、3 つのテーブルを使用して、製品に関するさまざまなカスタム フィールドを保存できます。必要に応じて正規化または非正規化する必要があります。売り手の製品のみのテーブルが必要な場合があり、その状態を別のテーブルに保存します。いずれにせよ、上記の方法で作業が完了します。

于 2012-04-23T02:47:39.610 に答える
1

ここに良いスキームがあると思います:

product_data - 製品 ID、カテゴリ ID、名前、価格、説明

product_meta - 製品 ID、attribute_name、attribute_value

product_variants - 製品 ID、バリアント ID、バリアント値

また、バリアント名とカテゴリ名/説明の別の表も必要です。

例:

ID  | Category_ID | Name   | Price
251 | 14          | Tomato | 5.00

ID  | Attribute | Value
251 | Condition | Fresh
251 | Color     | Red

ID  | Variant_ID | Name | Value
251 | 50         | Size | Small
251 | 50         | Size | Huge

したがって、基本的には約 5 ~ 10 個のテーブルがあります (Google の DB 正規化の 3 ステップ)。すべてのテーブルは ID でリンクされています。

JOIN必要なことは、ステートメントとWHERE product_id条件を使用して値を取得することだけです。

于 2012-04-23T02:53:41.620 に答える