Ljt*_*Ljt 1 sql sql-server sql-server-2008
我正在设计一个使用 Sql 服务器作为后端的零售业务数据库。有一些产品是可以多卖的,比如铅笔可以卖一打,纸可以卖单、令、筒。基本上,每种产品都可以以多个单位出售。
App需要支持
下面是我的初始设计
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
Run Code Online (Sandbox Code Playgroud)
我的设计有什么缺陷吗?有什么我想念的吗?这不可能是一个新问题。有没有人有任何想法(或例子)?
我有几点建议:
似乎您可以删除 UnitConversion 表并仅针对 Unit 记录存储 Multiplier 值(因此您可以针对每个 / 件存储 1,针对 Box 存储 24)。然后转换就是“From”单位的数量除以“To”单位的数量。
不同的单位可能有不同的条形码吗?如果是这样,条形码可以存储在单位记录中。
在您的 Inventories 和 Invoices 表中,ProductId 列可能是不必要的,因为您可以通过加入 Units 表来获得它。
为了支持先进先出或后进先出,您将需要存储有关您的库存的更多具体信息,因此有一些方法可以知道它的预订日期,剩余数量,也许还有一些方法可以识别该特定项目(或组项)。
希望这可以帮助!
编辑:您的库存表可能如下所示:
Id | UnitId | [identifier] | CurrentQuantity | DateAdded
1 | 1 | ABC123 | 20 | 2017-01-10
2 | 1 | ABC124 | 96 | 2017-01-12
Run Code Online (Sandbox Code Playgroud)
[标识符] 列(名称由您决定!)将存储某种识别实物库存的方式,这可能是用户在收到物品时分配的内容,或者他们的供应商可能已经添加了一些可以使用的内容。
要在某人想要购买 24 支铅笔的场景中实施 FIFO,您知道需要从标有“ABC123”的项目组和标有“ABC124”的项目组中取出 20 支。
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |