鞋子在线商店的数据库规范化

时间:2013-08-11 04:19:54

标签: mysql database database-design normalization database-normalization

更新

这是我目前的数据库图表,适用于销售

的在线鞋子
  • 鞋子有不同的类别(高跟鞋,坡跟鞋,凉鞋,高跟鞋折扣等)
  • 每双鞋都会有不同的颜色,不同的尺码。对于每种颜色和尺寸,
  • 它将有不同的库存,可能有不同的订单类型(现货/预订)
  • 对于每种尺寸和颜色,也许它会有不同的价格
  • 并且每只鞋子具有不同的尺寸和颜色,它们(可能)具有不同的图像而不是通用的

enter image description here

我正确地做到了吗?我该怎么做才能改进这个数据库?我非常感谢任何反馈/意见/评论

END UPDATE

我是数据库设计的新手,与网上商店(MySQL数据库)的数据库设计混淆

假设网上商店将销售各种颜色和尺寸的不同颜色,尺寸,不同库存和价格的鞋子。

我想出了这些表格:

generic_shoes

id
name
category_id
details
image

颜色

id
color

尺寸

id
size
size_details

specific_shoes

id
generic_shoes_id //references to generic_shoes
name             // if the owner wants to make another name, if not then use generic_shoes' name
order_type       //ready stock or pre order

然后我想出了具有多对多rel的pivot colors_shoes和sizes_shoes: 的 colors_specific_shoes

id
color_id
specific_shoes_id

sizes_specific_shoes

id
size_id
specific_shoes_id

然后我认为差异颜色和大小将有差异库存和可能不同的价格,所以我想出:

shoes_product_details

id                //will be used in the orders table
colors_shoes_id   //reference to pivot colors_shoes
sizes_shoes_id    //reference to pivot sizes_shoes
specific_shoes_id //reference to specific_shoes
stock             //each color and size will have diff stock
price             //each color and size maybe will have diff price
weight            //each size will have different weight

我认为这些表格会很好,但是我认为,我应该使用这个表格吗?

删除

  1. sizes_specific_shoes
  2. colors_specific_shoes
  3. 并且只使用specific_shoes_details表中的颜色ID和大小id: (在下表中,我只是直接引用颜色和尺寸表)

    specific_product_details表

    id                      //will be used in the orders table
    color_id                //reference to colors table
    size_id                 //reference to sizes table
    specific_shoes_id       //reference to specific_shoes
    stock                   //each color and size will have diff stock
    price                   //each color and size maybe will have diff price
    weight                  //each size will have different weight
    

    我认为问题在于最后一张表是 - >外键级联,如果删除了颜色/大小,那么它也会删除specific_shoes_details行。

    任何人都能给我更好的方法吗?因为我不知道我应该使用哪种方法,第一种方法有颜色和大小数据透视表或最后一种..

    感谢

    我真的很感激任何帮助/反馈

2 个答案:

答案 0 :(得分:2)

我认为您在数据库设计方面做得很好。

我会选择你的最后一个。您几乎不可能想要删除颜色或大小。你不再需要在18岁开展业务吗?

更好的删除选项是将颜色设置为非活动状态。添加一个活动列,以便您可以将其关闭,但仍保留库存。

我还会为特定的鞋子添加描述和/或图像。

我相信你也可以选择不删除级联,如果这是你所关心的。

答案 1 :(得分:0)

从问题的描述中,我发现有一些我无法理解的复杂性。我应该能够消除特定的表格。

以下是我建议您考虑的架构。

  1. colors(color_id,color_name,active,...)
  2. sizes(size_id,size_name,size_description,active,...)
  3. 类别(category_id,category_name,active,...)
  4. images(image_id,image_path,active,...)
  5. order_mode(mode_id,mode_name,mode_description,...)
  6. 鞋子(shoe_id,color_id,size_id,category_id,image_id,mode_id,股票,价格,重量......)
  7. 如果您的尺寸也需要国家/地区编码,您可以获得其他级别的详细信息。在这种情况下,请考虑

    1. sizes(size_id,size_name,country_id,size_description,active,...)
    2. country(country_id,country_name,active,...)
    3. 请注意,我在所有表上都留下了一个活动标志,以便您可以使用它作为特定参考元素未被使用的指示,您可以使用它来级联到鞋子表。

      我相信这种模式的好处是它更简单,最好,因为我可以告诉它提供与你提议的相同的规范化水平。