【发布时间】:2010-10-17 06:37:44
【问题描述】:
我有一个表格,可以按每件商品跟踪库存数据。这是表格的简化版本(排除了一些非关键字段):
UniqueID,
ProductSKU,
SerialNumber,
OnHandStatus,
Cost,
DateTimeStamp
每次给定部分发生问题时,都会创建一个新的审计记录。例如,我的产品 ABC 第一次添加到库存时,我会得到如下记录:
1, ABC, 555, OnHand, $500, 01/01/2009 @ 02:05:22
如果ABC序列号555的成本发生变化,我得到一个新记录:
2, ABC, 555, OnHand, $600, 01/02/2009 @ 04:25:11
如果这件作品被售出,我会再创纪录:
3, ABC, 555, Sold, $600, 02/01/2009 @ 5:55:55
如果引入新的ABC,我得到这个记录:
4, ABC, 888, OnHand, $600, 02/05/2009 @ 9:01:01
我需要能够尽可能快地在任何时间点获取给定产品集的现有库存价值。
使用上面的示例,如果我想获取产品 ABC 到 2009 年 1 月 2 日的库存价值,我需要为每个唯一的产品/序列号组合选择最近的一个 记录之前到 01/03/2009,状态为“OnHand”,然后将费用相加。 (我现在还不能 100% 确定这个 select 语句会是什么样子,但我会尝试一下)。
我的问题:对于我所描述的审计表类型来说,这是一个好的结构吗?也就是说,如果索引得当,它是否适合快速查询? (我试图想象当这个表增长到数百万行时会发生什么。)
我是否应该将历史记录拆分到一个单独的表中,并且只将每个 ProductID/SerialNumber 组合的最新记录保留在“活动”表中?
感谢任何反馈/建议/cmets/链接。
谢谢!
【问题讨论】:
标签: database-design query-optimization audit-tables