如何跟踪用户对Web应用程序中对象的更改?

时间:2011-04-06 06:48:16

标签: java mysql hibernate database-design

我需要帮助才能找到一种聪明的方法来跟踪Web应用程序中的用户更改。

让我们说这个场景:

  1. 用户X登录并更新其个人资料中的几个字段,比方说电子邮件地址。
  2. 这会导致用户被标记为已更新,并且应由管理员
  3. 进行检查
  4. 在管理界面中,我们要突出显示已修改的字段
  5. 接下来的问题是,跟踪这些变化的最佳方法是什么?管理员可能无法检查用户数天甚至数周。我真的不需要保留原始值(至少在这一点上),我只想确定哪些字段已被更改。在数据库中跟踪这个的最佳方法是什么?

    该应用程序使用Hibernate和MySQL以Java / JSF编写,用于数据访问和存储。

    谢谢!

3 个答案:

答案 0 :(得分:1)

看看Hibernate Envers。 - 它提供了审核和版本控制,但我的这个对你的用例来说太胖了。

答案 1 :(得分:1)

您可以在数据库中创建一个表来进行更改......

  1. 在对数据库进行任何更改之前,运行select查询以检索现有数据并比较两者(以查找更改)
  2. 已更改的字段将写入表(id,timestamp,user_id,field,old_value,new_value)
  3. 这里发生了一些事情......无论是电子邮件警报,还是管理员登录时,它都会输出此表的条目,管理员可以选择批准/忽略它们(从而将它们从更改表中删除)。 / LI>

    如果您不需要保留旧值,则只需省略更改表中的old_value列。

答案 2 :(得分:1)

根据您的使用案例,我会选择以下内容:

使用以下结构创建“日志”表:

Username|Fieldname        |Processed
Pamar   |Profile.Email    |No
Pamar   |Homepage.Blurb   |No

在要跟踪的字段上设置触发器。每当修改“已记录”字段时,触发器将创建一个指向用户和字段名称的记录。

应用程序的标记部分将允许管理员查询日志记录表(仅选择“未处理的”记录)并一次处理一个或多个字段。 您没有提供有关标记/索引过程的许多详细信息,但此表应足以正确识别已更改的字段(您可以直接查询这些字段以访问当前值,这就是您所需要的)。处理(索引)给定更新后,您可以将其“已处理”标志设置为“是”(或删除它,您的选择)。

您可以选择使用时间戳字段,以便例如按照用户完成的顺序处理更新。

如果您甚至需要保留“以前的版本”,只需在当前结构中添加一个文本字段并更新触发器,以便将旧值保存在其中。