设计一个数据库,通过产品变体处理库存跟踪

时间:2017-01-28 15:44:30

标签: mysql database postgresql database-design relational-database

我正在为一个处理商店库存管理的项目设计一个数据库。

基本上,每个Product可以包含变体ColorSize,显然,每种可能变体的产品(库存)数量会有所不同。

示例:

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

]

在这里,同一产品(普通T恤衫)有不同的库存用于不同的变化。您可以想象,我需要能够独立更新每个股票。

那么,设计这样一个数据库最有效的方法是什么?我正在使用PostgreSQL,因此设计需要是关系型的,但我也可以访问JSON字段。

现在,我目前的设计看起来像这样:

产品

  • 名称(字符字段)
  • 数量(JSON字段)

颜色

  • 名称(字符字段)
  • 产品(多对一关系的外键)

尺寸

  • 名称(字符字段)
  • 产品(多对一关系的外键)

用户可以动态添加颜色和大小,因此系统必须对此进行补偿。

关于数量字段,假设产品P1的颜色为“红色”和“绿色”,尺寸为“S”和“M”。我试图让数量字段像这样:所有可能组合的4个键:(红色,S),(红色,M),(绿色,S),(绿色,M),其值代表股票的变化目前有库存。

所以,我的问题是:我走在正确的道路上吗?这种设计有效还是有更好的方法来做到这一点?感谢。

2 个答案:

答案 0 :(得分:1)

我在设计中看到的问题是,对于每个颜色为“红色”的产品,您都会在颜色表中记录“红色”。与尺寸相同。然后使用JSON定义数量会产生很多不一致的机会(例如,如果从颜色表中删除颜色然后忘记删除数量,那么它就不是'关系')。

以下是我将如何做到这一点:使用trenary关系。 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 :(得分:0)

您可以动态使用变体。库存表包含您的variation_ids 和product_ids。因此,您可以轻松跟踪您的库存。