我们当前的商店库存数据库布局包括一个表,其中包含每个项目的记录,并包括项目属性,如价格、成本、描述、SKU 等。然后每个商店都有一个包含 SKU 和数量的表,以及一个根据 SKU,每个商店的其他一些属性都不同。
虽然这比在 Items 表中为每个商店的数量设置一列要好,但这似乎也是一个有点丑陋的解决方案,因为当添加新商店时,您需要选择新表并添加新商品,您不仅要插入 items 表,还要插入每个单独的 store 表。
有没有比我看到的更好的方法来解决这个问题?感觉好像有。
我们当前的商店库存数据库布局包括一个表,其中包含每个项目的记录,并包括项目属性,如价格、成本、描述、SKU 等。然后每个商店都有一个包含 SKU 和数量的表,以及一个根据 SKU,每个商店的其他一些属性都不同。
虽然这比在 Items 表中为每个商店的数量设置一列要好,但这似乎也是一个有点丑陋的解决方案,因为当添加新商店时,您需要选择新表并添加新商品,您不仅要插入 items 表,还要插入每个单独的 store 表。
有没有比我看到的更好的方法来解决这个问题?感觉好像有。
为什么没有包含 SKU、StoreId 和库存级别的库存表?
例如
Sku | StoreId | StockLevel
1234 | 001 | 15
1235 | 001 | 16
1234 | 002 | 8
1235 | 002 | 0
所以,商店 002 的 sku 1235 缺货,但商店 001 有很多。此表格布局还允许您使用类似
select sku, sum(StockLevel) from stock group by sku
通过遵循数据规范化规则,您可能希望创建一个如下所示的表:
store_id | sku | quantity | other_attributes ...
---------+--------+----------+---------------------
1000 | 129832 | 234 | ...
1000 | 129833 | 334 | ...
1000 | 129834 | 23 | ...
1001 | 129832 | 0 | ...
1001 | 129833 | 12 | ...
1001 | 129834 | 10 | ...
...
本质上,它是一个 store_inventory 表。这样,您可以通过以下方式过滤到给定的商店
WHERE store_id = 1000
ETC...
据我所知,你真的想要三张桌子:
产品
ProductID
Price
Description
...
店铺产品
ProductID
StoreID
Quantity
...
店铺
StoreID
Address
...
这是一个完全有效且规范化的数据库设计,听起来基本上就是您现在所拥有的。
听起来它从正确的路径开始,为项目的所有常见属性提供一个表。
所有商店的库存计数应该在一个单独的附加表中,而不是每个商店都有一个单独的表,使用 Item's Key 和 Store's Key 作为该表上的组合主键。
例如
ItemKey
名称
价格
SKU
StoreKey
名称
地址
StoreKey
ItemKey
数量
在 Inventory 表上同时使用 StoreKey 和 ItemKey 将使您的记录保持唯一。
这将使您不仅可以轻松查找单个商品,还可以查找以下内容:
一家商店的所有商品数量(按 StoreKey
) 所有商店的一件商品数量(按商品密钥) 所有商店中的
商品数量(按数量)
等