处理数据库中的历史记录/更改跟踪以及对BL的影响

时间:2009-07-04 10:13:26

标签: database-design persistence history undo

在当前的应用程序中,我在客户端上工作,要求我们保存系统中发生的每个操作的历史记录,并提供回溯到先前信息状态的能力。

例如:假设我的应用程序需要处理存储空间,每个用户都可以添加/更新/删除/读取(所有CRUD)库存

如果用户添加了带有动作A1的产品P1并更新了其信息,那么它将变为P2,动作A2,稍后变为P3,P4等。在应用程序中,用户将有一个屏幕,显示产品和屏幕的所有演变,显示用户所做的所有操作。 用户可以选择某个动作并“撤消”它。

乍一看,我认为我将存储某种类型的动作表,其中包含我需要的有关动作的所有信息,当我需要撤消和动作时,我只需恢复代码中的更改。

我的问题是:如果产品没有存储在一个表中,而是分成几个表(因为优化/可理解性等),我需要弄清楚确切的变化位置。

我应该在Actions表中记录哪些表受到影响并将其反映到BL ????

在我看来,必须有一个更好的解决方案

2 个答案:

答案 0 :(得分:1)

我做了类似的事情,并且能够恢复你需要跟踪改变的领域的变化。

只要你知道这个领域的位置,这个fiels的位置并不重要。 因此,您可以在BL中创建一种帮助类,“知道”放置每个字段的位置,并将其映射到DB中的右表 - >列。这将减少BL中的字符串和其他DB元素。

把这个助手类放在DAL中。

当您需要查看更改(和/或还原它们)时,请向DAL发送问题...

顺便说一下,在MS-SQL 2008中有内置的更改跟踪,因此您可以使用它来查找更改。 - Change Tracking

答案 1 :(得分:0)

可能使用更具体的操作,以便应用程序确切知道todo

不要在数据库上放置逻辑