【问题标题】:POS Database LayoutPOS 数据库布局
【发布时间】:2011-01-04 17:23:45
【问题描述】:
我们当前的商店库存数据库布局包括一个表格,其中包含每个商品的记录并包括商品属性,例如价格、成本、描述、SKU 等。然后每个商店都有一个包含 SKU 和数量的表格,以及其他一些因 SKU 而异的属性。
虽然这比在 Items 表中为每个商店的数量设置一列要好,但这似乎也是一个有点丑陋的解决方案,因为当添加新商店时,您需要选择一个新表,当一个新的添加项目后,您不仅必须插入项目表,还必须插入每个单独的商店表。
有没有比我看到的更好的方法来解决这个问题?感觉好像有。
【问题讨论】:
标签:
sql
database-design
layout
inventory
【解决方案1】:
为什么没有包含 SKU、StoreId 和 Stock 级别的 stock 表?
例如
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
【解决方案2】:
通过遵循数据规范化规则,您可能希望创建一个这样的表:
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
等等……
【解决方案3】:
据我所知,你真的想要三张桌子:
产品
ProductID
Price
Description
...
商店产品
ProductID
StoreID
Quantity
...
商店
StoreID
Address
...
这是一个完全有效且规范化的数据库设计,听起来基本上就是您现在所拥有的。
【解决方案4】:
听起来好像是从正确的路径开始,为项目的所有常见属性提供一个表。
所有商店的库存盘点应该在一个单独的附加表中,而不是每个商店都有一个单独的表,使用 Item's Key 和 Store's Key 作为该表上的组合主键。
举例
项目
物品钥匙
名称
价格
货号
商店
存储密钥
名称
地址
库存
存储密钥
物品钥匙
数量
在 Inventory 表上同时使用 StoreKey 和 ItemKey 将使您的记录保持唯一性。
这将使您不仅可以轻松查找单个项目,还可以查找以下内容:
StoreKey 在一个商店的所有商品的数量
通过 ItemKey 在所有商店中的一件商品的数量
哪些商品在所有商店中的数量都很少
等等