【问题标题】:handling history/change tracking in the DB and consequences on the BL处理数据库中的历史/更改跟踪以及对 BL 的影响
【发布时间】:2009-07-04 10:13:25
【问题描述】:

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

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

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

乍一看,我认为我会存储某种 Actions 表,其中包含我需要的有关操作的所有信息,当我需要撤消和操作时,我只需还原代码中的更改。

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

我是否应该在 Actions 表中注明哪些表受到了影响并将其反映给 BL??

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

【问题讨论】:

    标签: database-design persistence history undo


    【解决方案1】:

    我曾经做过类似的事情,为了能够还原更改,您需要跟踪更改的字段。

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

    只需将这个助手类放在 DAL 中即可。

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

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

    【讨论】:

      【解决方案2】:

      也许使用更具体的操作,以便应用程序准确地知道要做什么

      不要把逻辑放在数据库上

      【讨论】:

        猜你喜欢
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多