1

簡潔にするために、ここでは単純化する比較的単純なデータベース設計を使用しています。

私は4つのテーブルを持っています=> Products, Product_Sizes, Stores, Catalogs.

6 つの店舗があり、各店舗には独自のカスタマイズされたカタログがあり、さまざまな製品ProductsProduct_Sizesテーブルから選択されたサイズの品揃えです。

テーブルをどのように設計するのが最適か疑問に思っていCatalogsます。私のアイデアは次のとおりです。

id store_id product_id product_size
1  1        53522      1
2  1        40299      1
3  2        43326      1
4  2        43326      2 

また

id store_id product_id product_sizes
1  1        53522      1
2  1        40299      1
3  2        43326      1,2

各ストアには独自の (そして 1 つだけの) カタログがあるため、store_id ですべてのエントリを取得するクエリは、そのストアのカタログになります。

別のアプローチは、products と product_size を組み合わせた別のテーブルを作成して、それぞれ独自の一意のテーブルにすることです。これを と呼びましょうProducts

id product_id product_size
1  1          1
2  1          2
3  1          3
4  1          4

この別のテーブルから、考えられるすべての製品とそのサイズ バリエーションの一意の ID が得られます。Catalogsこれにより、各エントリの製品ごとに 1 つの ID が生成されます。

これは正しくないと感じており、これをより適切に設計する方法を指し示すことができないため、いくつかの批評とより良い提案を聞きたいと思っています. また、店舗ごとに複数のカタログを実装する場合、この現在の設計では悲しくなることはわかっています. どんなフィードバックでも大歓迎です!!

4

2 に答える 2

2

私だったら、catalog独自の ID を持つエンティティ テーブルとしてテーブルを作成します。そのカタログが 1 つのみに属している場合は、列を外部キーとしてstore追加します。store_id

次に、テーブルを追加しcatalog_productsます。これには、catalogテーブルへの外部キーと、productsおよび/またはproduct_sizesテーブルへの外部キーがあります。( a が1 つのテーブルproduct_sizeのみに属している場合は、そのテーブルのみです。)productsproducts_sizes

多対多の関係を解決するには、通常、3 番目の関係テーブルを追加します。

  • カタログにはゼロ、1 つ、または複数の製品 (product_sizes) があります
  • 製品 (product_size) がゼロ、1 つまたは複数のカタログに表示されます

リレーションシップ テーブルは、次のように表すことができる "1 対多" のリレーションシップを取得します。

  • catalog_product は、正確に 1 つのカタログに表示されます
  • カタログには、ゼロ、1 つ、または複数の catalog_product が含まれます
  • catalog_product は 1 つの製品にのみ関連付けられています
  • 製品はゼロ、1 つまたは複数の catalog_product に属します
于 2013-07-22T21:05:49.460 に答える