首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跟踪数据变化

跟踪数据变化
EN

Stack Overflow用户
提问于 2011-02-07 17:06:11
回答 3查看 1.6K关注 0票数 3

我在一个以市场调研数据库为中心的网站上工作,它是用PHP和MySQL开发的。它由两个主要部分组成:一个是用户插入和更新自己的数据(假设一个表T中有一个user_id字段),另一个是网站管理员可以插入新的或更新现有记录的部分(相同的表)。

显然,在某些情况下,最终用户的数据将被管理员覆盖,而在其他情况下,管理员输入的数据则由最终用户更新(这两种方式都很好)。

其要求是,如果最终用户是最后更新某个字段的用户,则用蓝色突出显示视图/编辑表单;如果管理员“指责”,则显示红色。

我正在研究一种有效和一致的方法来实现这一点。

到目前为止,我有以下选择:

  • 对表T中的每条记录添加另一条( char(1) ),其中如果最终用户插入/更新了字段,则写入‘U’;如果管理员这样做,则写入‘A’。当呈现视图/编辑表单时,使用这些信息突出显示每个字段accordingly.
  • Create --一个新的表H,该表存储包含user_id、field_name、last_update_user_id等内容的编辑历史记录。在主表T中更新字段时,保持表H的最新情况。当呈现视图/编辑表单时,请使用此信息相应地突出显示每个表单字段。

这些选择的利弊是什么;你能提出其他的建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-07 19:13:56

我想这取决于你的前瞻。

第一种方法的优点是实现非常简单,更新和利用非常简单,而且只会稍微增加您的存储需求,但就存储的信息量而言,它也是最小的。

如果您使用第二种方法并存储更完整的历史记录,如果您将来需要添加一个“编辑历史记录”,那么您已经为此设置了一些东西,并且有很多数据在等待。但如果你永远不需要这些数据,那就有点浪费了。

或者,如果你想要这两个世界中最好的,你可以把它们结合起来。保存完整的编辑历史记录,但也更新主记录中的单字符标志.这样,您就不需要对历史进行任何处理就可以找到最新的编辑,只需查看标记即可。但如果你真的需要完整的历史,它是可用的。

就我个人而言,我更喜欢保存比我当时想要的更多的信息。存储空间非常便宜,而且你永远不知道什么时候它会派上用场。我可能会比您提议的更深入,并且使编辑历史能够跟踪它们更改的内容,以及前后值。这可以非常方便的调试,并可能是有用的未来取决于项目的确切需要。

票数 2
EN

Stack Overflow用户

发布于 2011-02-07 19:22:18

是的,实现一个包含历史数据副本的审计表,由谁/谁来完成。我目前在一个系统上工作,使其保持简单,并将值更改作为简单的名称-值字符串对以及日期和由谁来写。它需要强制性的主记录调整,但对跟踪工作很好。您可以通过触发器轻松地实现这一点。

票数 2
EN

Stack Overflow用户

发布于 2011-02-07 19:22:58

审核数据更改的最佳方法是通过数据库表上的触发器。在您的情况下,您可能只想更新最后一个进行更改的人。或者,您可能需要一个完整的审计解决方案,在其中存储前面的值,以便在错误时很容易地还原它们。但关键是要在数据库上,而不是通过应用程序来实现这一点。数据库更改通常是通过应用程序以外的源进行的,您可能想知道是否也发生了这种情况。假设有人入侵了数据库并更新了数据,您不希望能够轻松地找到旧数据,或者知道是谁做的,即使他或她是通过查询窗口而不是通过应用程序完成的?如果您需要一次获得大量数据,您可能还需要知道数据是否通过数据导入被更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4924119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档