web-dev-qa-db-ja.com

在庫のためのデータベース設計

典型的な製品ベースのMySQLデータベースの設計を開始しましたが、テーブルの設計方法についてサークルで作業を続けています。

いろいろな種類の商品があります

  • ジーンズ
  • Tシャツ
  • ドレス

同じ属性の多くを持っている

  • サイズ
  • 価格

ただし、一部の製品には、長さ、ロゴ、パッケージなどの特定の属性があります。

列の多くが同じでも、製品ごとに個別のテーブルを作成しますか、それとも一般的な製品テーブルを作成してから特定の製品のサブテーブルをいくつか作成しますか?

8
Berry Bonds 3

すべての製品の表を作成しないでください。

この問題は多くの方法で解決されています。これを試して:

製品(または製品)テーブルを作成し、共通の製品属性を製品テーブルに入れてから、次のような属性テーブルと製品属性テーブルを作成します。

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ストアを製品に使用する方法があります。次に、リレーショナルデータベーススキーマの複雑さに頼らずに、製品の各タイプに必要な属性を保存できます。

9
Robert Munn

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
1
ChuckCottrill