我正在使用Sql server作为后端为零售业务设计数据库。有些产品可以在多个单元中出售,例如,铅笔可以在ea和打印出售,纸张可以以片材,ream和canton出售。基本上,每种产品都可以在多个单元中出售。
应用程序需要支持
以下是我的初步设计
Table: Products
ProductId | Barcode | Name | BaseUnitId
1 | XXXX | Pencil | 1
Table: Units
UnitId | Name
1 | Each / Pieces
2 | Box
Table: UnitConversion
ProductId | BaseUnitId | Multiplier | ToUnitId |
1 | 1 | 24 | 2 | // 24 pencils in a box
Table: Inventories
Id | ProductId | UnitId | Quantity
1 | 1 | 1 | 48 //In pieces
Table Invoices
Id | ProductId | UnitId | Quantity
1 | 1 | 2 | 1.5 //Sold/Purchased 1.5 boxes that means 18 pieces
我的设计有什么缺陷吗?有什么我想念的吗?这不是一个新问题。有没有人有任何想法(或例子)?
答案 0 :(得分:5)
我有一些建议:
看起来您可以删除UnitConversion表并将Multiplier值存储在Unit记录中(因此您将针对每个/ Pieces存储1,对Box存储24)。那么转换只是'From'单位的数量除以'To'单位的数量。
有可能不同的单位会有不同的条形码吗?如果是这样,则可以将条形码存储在单元记录中。
在您的清单和发票表中,可能不需要ProductId列,因为您可以通过加入Units表来获得此信息。
为了支持FIFO或LIFO,你需要存储更多关于你股票的具体信息,所以有一些方法可以知道它的预订日期,剩余数量,也许还有一些识别方法该特定项目(或项目组)。
希望这有帮助!
编辑:您的库存表可能如下所示:
Id | UnitId | [identifier] | CurrentQuantity | DateAdded
1 | 1 | ABC123 | 20 | 2017-01-10
2 | 1 | ABC124 | 96 | 2017-01-12
[标识符]列(名称取决于您!)将存储某种识别实际库存的方式,这可能是用户在收到物品时分配的内容,或者他们的供应商可能已经添加了一些使用。
要在某人想要购买24支铅笔的情况下实施FIFO,您需要从标有“ABC123”和4个标记为“ABC124”的项目中选择20个。