关于多个目录的数据库设计的建议

时间:2013-07-22 20:54:49

标签: mysql database database-design relational-database

我有一个相对简单的数据库设计,为简洁起见,我将在这里进行简化。

我有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 

OR

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

每个商店都有自己唯一的(且只有一个)目录,因此通过store_id获取所有条目的查询将导致该商店的目录。

另一种方法是将组合产品和product_size的另一个表创建到每个独立的表中,我们称之为Products

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

这个单独的表格为我提供了所有可能产品及其尺寸变体的唯一ID。这将导致每个Catalogs条目的每个产品都有一个ID。

我很想听到一些批评和更好的建议,因为我觉得这是不对的,我不知道如何更好地设计这个。此外,如果我们每个商店实施超过1个目录,我知道这个当前的设计会让我感到悲伤。任何反馈都会非常感谢!!

2 个答案:

答案 0 :(得分:2)

如果是我,我会将catalog表创建为实体表,并使用它自己的id。如果该目录只属于一个store,我会添加一个store_id列作为外键。

然后我会添加一个catalog_products表。这将具有catalog表的外键,以及products和/或product_sizes表的外键。 (如果product_size只属于一个products表,那么只有products_sizes表。)

要解决多对多关系,我们通常会添加第三个关系表。

  • 目录包含零个,一个或多个产品(product_sizes)
  • 产品(product_size)出现在零个,一个或多个目录中

关系表为我们提供了“一对多”关系,我们可以代表:

  • catalog_product恰好出现在一个目录中
  • 目录包含零个,一个或多个catalog_product
  • catalog_product只与一个产品相关
  • 产品属于零,一个或多个catalog_product

答案 1 :(得分:0)

id store_id product_id product_size

1  1        53522      1
2  1        40299      1
3  2        43326      1
4  2        43327      2

具有不同尺寸的相同产品名称的不同产品ID。