【问题标题】:Designing a database that handles inventory tracking with product variations设计一个处理库存跟踪和产品变化的数据库
【发布时间】:2021-06-29 23:11:09
【问题描述】:

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

基本上,每个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”。我正在尝试使 Quantities 字段如下所示:所有可能组合的 4 个键:(Red,S),(Red,M),(Green,S),(Green,M),其值代表股票这些变化目前有库存。

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

【问题讨论】:

  • 除了颜色/尺寸/库存还有其他属性吗?

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


【解决方案1】:

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

我会这样做:使用三元关系。

你的表格看起来像这样:

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

STOCKS 表代表三元关系。

通过这种方式,您可以保持足够的独立性,并且使用单个查询更容易跟踪您的库存。

【讨论】:

  • 必须承认,这要好得多。非常感谢。
【解决方案2】:

您可以动态使用变体。库存表包含您的variation_ids 和product_ids。这样您就可以轻松跟踪您的库存。

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 2012-03-10
    相关资源
    最近更新 更多