您将如何为RDBMS中的库存管理系统设计数据模型?
你愿意:
基于交易的库存系统在捕获的详细程度方面似乎更优越,但更难以正确实施。性能会随着时间的推移而降低。
基于数量的库存系统似乎更容易,但可能需要额外的锁定以确保数量值为++或 - 正确。
你会选择哪一个?
答案 0 :(得分:2)
我很可能会进入触发路径,并在事务被推入数据库时更新数量。这使得很容易看到当前数量是多少而不需要一堆子查询和计算。
如果在触发器中完成,那么您可以确保无论交易来自何处,库存表中的数量将始终更新(是否通过硬INSERT或通过应用程序添加了交易)。
如果存在日志问题,请将一些日志记录包装到触发器中,以便在数量之前/之后跟踪到单独的日志记录表中。
触发器可能看起来像这样(未经测试):
CREATE TRIGGER [dbo].[OrderAdded]
ON [dbo].[Orders]
AFTER INSERT
AS
BEGIN
DELCARE @ProductID int; DECLARE @Qty int;
SET @ProductID = (SELECT ProductID FROM inserted);
SET @Qty = (SELECT Qty FROM inserted);
UPDATE StockTable
SET Stock = Stock - @Qty
WHERE ID = @ProductID
END
我不认为只要你的StockTable
为ID和Stock字段正确编入索引就会担心性能问题(我当然会把这一切都搞砸了)鉴于您没有提供任何数据库信息)。
答案 1 :(得分:2)
如果审计跟踪很重要,您需要事务数据。而且,我从来没有见过真正的系统。
就表现而言,我会:
然后总计将是此非规范化值和当前事务的总和。
此方法还有助于备份,因为事务记录的数量可能超过可用磁盘空间。因此,请将仓库写入磁带备份。