有一个运行 MSSQL 2005 的 win 2003 机器。每天早上都有一个数据库,其中包含前一天创建的新/修改的 SalesOrder。该数据库有几个表:SalesOrder、SalesOrderItem、SalesOrderItemBom。每个都有一个对应的版本表(即 SalesOrderVersion、SalesOrderItemVersion、SalesOrderItemBomVersion),该表具有完全相同的字段,但有 2 个附加列 VersionStartDate、VersionEndDate。非版本化表具有最新数据。
VersionStartDate 也是版本表的 PK 的一部分,例如:- SalesOrder 将 OrderID 作为 PK,SalesOrderItem 将 VersionStartDate、OrderID 作为 PK。
版本表如何工作的简化示例:
销售订单
OrderID, 金额 1, 100 2, 200
销售订单版本
VersionStartDate, OrderID, VersionEndDate, 金额 20090101 13:00:00, 1, 20090103 08:00:00, 50 20090103 08:00:00, 1, 99991231 00:00:00, 100 20090101 09:00:00, 2, 20090105 15:00:00, 300 20090105 15:00:00, 2, 99991231 00:00:00, 200
每当更改 SalesOrder 中的行时,SalesOrderVersion 中的当前行 VersionEndDate 都会更新,并将新行插入到 SalesOrderVerion 中,VersionEndDate 为 99991231
注意:如果 SalesOrderItem 中的记录发生更改,不一定会导致 SalesOrder 中的“父”记录发生更改
已被要求制作一份显示销售趋势和每日增量的报告。在我的脑海中,我正在考虑为 SalesOrder、SalesOrderItem、SalesOrderItemBom 创建 3 个快照表,它们捕获当天的“最新数据”,从而构建增量快照以显示趋势。除了需要更多磁盘空间之外,与执行连接版本表的存储过程相比,此方法是否有任何缺点,因为它似乎是一个漫长而昂贵的查询。
有什么想法或建议吗?