0

製品構築を可能にする機能を追加しています。

たとえば、ユーザーはさまざまな属性を構成できます。これらの属性は、プレーンな値(高さ、色など)または既存の製品(家具のノブを選択できます)のいずれかになります。

私は現在DB設計を構築しており、提案を探しています。私が思いついたのは次のとおりです。

製品-既存の製品テーブル例:ProductA

ParentProducts -idParentProduct例:ProductB

ParentProduct_Attributes -idParentProduct、idAttribute、Type(Product / Value)例:高さ、ノブ

ParentProduct_Attribute_Values -idAttribute、idValue、Value例:10 "

ParentProduct_Attribute_ChildProducts -idAttribute、idChildProduct、Type(Reg。Product / Child Product)例:ChildProductA、ProductA

ChildProducts -idChildProduct

これは、実際の属性値を取得するための多くの手順のように思えます。

たとえば、ProductBという家具があります。ProductBには高さとノブがあります。高さの選択肢は10"、12"(値)であり、ノブの選択肢はChildProductA、ProductA(Products)であり、それぞれ異なるテーブルから取得されます。ChildProductAは子製品ですが、ProductAは通常の製品であるため、ここでも2つの別々のテーブルがあります。

これに関する入力はありますか?別のアイデア?

私がはっきりしていたことを願っています。

ありがとうございました。

4

2 に答える 2

0
ParentProduct_Attributes - idParentProduct, idAttribute, Type (Product/Value) Ex: Height, Knob

ParentProduct_Attribute_Values - idAttribute, idValue, Value Ex: 10" 

値 (ParentProduct_Attribute_Values ) 用に別のテーブルを作成する代わりに、1 つのテーブルに配置する必要があります。非正規化は、特定の条件でクエリを固定するのに役立ちます。クエリごとに 1 つの結合が削減されるため、値テーブルを選択します。

于 2012-08-28T21:16:05.967 に答える
0

次の構造を提案します。

Products - idProduct, type (Regular / Parent / Child)
Product_Attributes - idAttribute, idProduct
Product_Attributes_Values - idValue, idAttribute, value, idProduct

このようにして、テーブルが 3 つだけ残ります。Product_Attributes_Valuesテーブルにはフィールドがvalueあり、idProductどちらもNULL可能です。が設定されている場合value、それは単純な値です。が設定されている場合idProduct、それは製品であり、の外部キーである必要がありますProducts

レギュラー、親、および子製品間のタイプの区別は、 のtypeフィールドで行いProductsます。必要に応じて、データベース外のアプリケーションで追加のチェックや検証を行うことができます。

于 2012-08-28T22:08:44.803 に答える