首页 文章

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

提问于
浏览
0

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

基本上,每个 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字段 .

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

Product

  • 名称(字符字段)

  • 数量(JSON字段)

Color

  • 名称(字符字段)

  • 产品(多对一关系的外键)

Size

  • 名称(字符字段)

  • 产品(多对一关系的外键)

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

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

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

1 回答

  • 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关系 .

    通过这种方式,您可以将事物分开,并且可以使用单个查询更轻松地跟踪您的库存 .

相关问题