我有一个应用程序,我想拍摄所有实体的快照,创建代表特定时间点的克隆表。然后,我希望能够比较这些快照之间的差异,以了解数据随时间的变化情况。
你如何在NHibernate中实现这一目标?似乎NH不是这种数据操作的设计,我不确定我是否滥用我的数据库,NH,或两者兼而有之。
(P.S。由于数据库引擎限制,我无法使用视图或存储过程。)
答案 0 :(得分:1)
您真的需要在此快照中保存每个实体的全部内容吗?如果是这样,也许像type_snapshot这样名称的表的集合会有所帮助。您可以将实体保存到此表(仅插入,永不更新)。您可以存储原始项的标识符,并为快照本身生成新的标识符。您可以保存每个快照的时间戳。您的item_snapshot表看起来像:
id | snapshot_date | item_id | item_prop1 | item_prop2 ...
123 | 7/16/10 | 15 | "item desc" | "item name" ...
在您的域中,您可以使用Snapshot实例(包含id和快照日期的快照以及T的实例)
它可能不太理想,因为它会引入第二组映射,但它是一种获取你要去的地方的方法。看起来你可能会更好地做一些离数据库引擎更近的事情,但不知道你对这些快照的想法(从应用程序的角度来看)很难说。
答案 1 :(得分:0)
我最后使用快照ID列扩充我的实体并复制表中的条目。结合过滤器,我可以从任何给定的快照中进行选择。不得不为遗留代码制作一些补丁,但它基本上有效。
答案 2 :(得分:0)
我们结束了,为快照创建了一个带有额外列类型timestamp的重复表。主表上的索引较小,因为我们有10万个+行,因此在同一个表中添加版本会创建更多的记录。还有不同表空间中的版本表(mssql上的db文件)