典型的な製品ベースのMySQLデータベースの設計を開始しましたが、テーブルの設計方法についてサークルで作業を続けています。
いろいろな種類の商品があります
同じ属性の多くを持っている
ただし、一部の製品には、長さ、ロゴ、パッケージなどの特定の属性があります。
列の多くが同じでも、製品ごとに個別のテーブルを作成しますか、それとも一般的な製品テーブルを作成してから特定の製品のサブテーブルをいくつか作成しますか?
すべての製品の表を作成しないでください。
この問題は多くの方法で解決されています。これを試して:
製品(または製品)テーブルを作成し、共通の製品属性を製品テーブルに入れてから、次のような属性テーブルと製品属性テーブルを作成します。
attribute
---------
attributeId
attributeName
attributeDescription
productattribute
----------------
productId
attributeId
attributeValue
次に、製品に任意の属性を割り当てることができます。
必要に応じて、次のようにしてスキーマをさらに進めることができます。
attribute
---------
attributeId
attributeName
attributeDescription
attributeType // [float, int, varchar, etc.]
productAttribute
----------------
productId
attributeId
attributeValueFloat
attributeValueInt
attributeValueVarChar
この手法ではスキーマが少し複雑になるため、追加の列を使用してデータ型ごとに値を格納する場合は、何が発生するかに注意してください。
ニーズにぴったり合う代替案として、MongoDBなどのNoSQLストアを製品に使用する方法があります。次に、リレーショナルデータベーススキーマの複雑さに頼らずに、製品の各タイプに必要な属性を保存できます。
1つのアプローチは、クラス階層を定義するのと同じようにデータベースを設計することです。ここでは、共通の属性を提供する基本テーブル(クラス)を定義し、特定の属性を提供する追加のテーブルを追加して、テーブルを拡張します。特定の製品。
基本製品テーブルを定義する
create table Products_base as
id
item
brand
model
description
size
color
price #more about this later
大幅に異なる製品の追加のテーブルを定義する
create table pants as
base #foreign key to base product
waist
length
material
style
create table dress as
base #foreign key to base product table
waist
hemlength
bust
material
belt
別のアプローチは、基本製品テーブルを定義してから属性テーブルを定義し、追加の各製品の属性を提供することです。
create table Products_base as
id autoincrement
item
brand
model
description
size
color
price #more about this later
create table attributes as
id autoincrement
name
description
create table product_+attributes as
product_id #product.id
attribute_id #attributes.id
value
例としてパンツを使用すると、パンツに属性を追加することになります(属性テーブルに追加します)。
"length", "length of item"
"inseam", "length of inseam"
"style", "style of article" #example, "jeans"
#etc
そして、属性の値を追加します
product.id("pants"), attribute.id("inseam"), "32in"
product.id("pants"), attribute.id("waist"), "34in"
product.id("pants"), attribute.id("style"), "jeans"
product.id("dress"), attribute.id("style"), "sundress"
#etc