0

私は、店舗の在庫管理を担当するプロジェクトのデータベースを設計しています。製品バリエーションによる在庫追跡を扱うデータベースの設計

基本的に、各Productは、バリエーションColorおよびSizeを有することができ、各可能なバリエーションの製品数(ストック)は、明らかに変化する。

例:ここ

[ 
    { 
     "product": "Plain T-Shirt", 
     "color": "Red", 
     "size": "Medium", 
     "stock": 10, 
    }, 
    { 
     "product": "Plain T-Shirt", 
     "color": "Red", 
     "size": "Large", 
     "stock": 2, 
    }, 

] 

、同じ製品(無地Tシャツ)は、異なるバリエーションのための異なる株式を有しています。あなたが想像しているように、私はそれぞれの在庫を独立して更新できる必要があります。

このようなデータベースを設計する最も効率的な方法は何でしょうか?私はPostgreSQLを使用していますので、デザインはリレーショナルである必要がありますが、JSONフィールドにもアクセスできます。

今、私の現在の設計は一種の次のようになります。

製品

  • 名(文字フィールド)
  • 数量(JSONフィールド)

  • 名(文字フィールド)
  • 製品(多対1の関係の外部キー)

サイズ

  • 名(文字フィールド)
  • 製品(外国人多対1の関係の鍵)

色とサイズはユーザーが動的に追加できるので、システムはこれを補う必要があります。

「数量」フィールドでは、商品P1の色が「赤」、「緑」、サイズ「S」、「M」であるとします。私はQuantitiesフィールドを次のようにしようとしています:(Red、S)、(Red、M)、(Green、S)、(Green、M)現在在庫があります。

私の質問はこれです:私は正しい道にいますか?このデザインは効果的ですか、これを行うにはより良い方法がありますか?ありがとう。

+0

カラー/サイズ/ストック以外の属性はありますか? –

答えて

1

私があなたのデザインで見る問題は、色が「赤」のすべての製品について、色テーブルに「赤」のレコードがあることです。サイズと同じです。 JSONを使用して数量を定義すると、不一致の可能性が非常に高くなります(たとえば、色表から色を削除した後、数量を削除することを忘れた場合、それはあまり関係しません)。

私はそれをどうしたらいいですか? enter image description here

あなたのテーブルは、次のようになります

PRODUCTS(id,name,...) 
COLORS(id,name,...) 
SIZES(id,size_label,...) 
STOCKS(id,product_id,color_id,size_id,quantity) 

STOCKSテーブルはtrenary関係を表しています。

このようにすれば、物事を十分に分けておくことができます。単一のクエリを使用して在庫を追跡するのが簡単です。

+1

これははるかに優れています。どうもありがとう。 –