我在一个以市场调研数据库为中心的网站上工作,它是用PHP和MySQL开发的。它由两个主要部分组成:一个是用户插入和更新自己的数据(假设一个表T中有一个user_id字段),另一个是网站管理员可以插入新的或更新现有记录的部分(相同的表)。
显然,在某些情况下,最终用户的数据将被管理员覆盖,而在其他情况下,管理员输入的数据则由最终用户更新(这两种方式都很好)。
其要求是,如果最终用户是最后更新某个字段的用户,则用蓝色突出显示视图/编辑表单;如果管理员“指责”,则显示红色。
我正在研究一种有效和一致的方法来实现这一点。
到目前为止,我有以下选择:
这些选择的利弊是什么;你能提出其他的建议吗?
发布于 2011-02-07 19:13:56
我想这取决于你的前瞻。
第一种方法的优点是实现非常简单,更新和利用非常简单,而且只会稍微增加您的存储需求,但就存储的信息量而言,它也是最小的。
如果您使用第二种方法并存储更完整的历史记录,如果您将来需要添加一个“编辑历史记录”,那么您已经为此设置了一些东西,并且有很多数据在等待。但如果你永远不需要这些数据,那就有点浪费了。
或者,如果你想要这两个世界中最好的,你可以把它们结合起来。保存完整的编辑历史记录,但也更新主记录中的单字符标志.这样,您就不需要对历史进行任何处理就可以找到最新的编辑,只需查看标记即可。但如果你真的需要完整的历史,它是可用的。
就我个人而言,我更喜欢保存比我当时想要的更多的信息。存储空间非常便宜,而且你永远不知道什么时候它会派上用场。我可能会比您提议的更深入,并且使编辑历史能够跟踪它们更改的内容,以及前后值。这可以非常方便的调试,并可能是有用的未来取决于项目的确切需要。
发布于 2011-02-07 19:22:18
是的,实现一个包含历史数据副本的审计表,由谁/谁来完成。我目前在一个系统上工作,使其保持简单,并将值更改作为简单的名称-值字符串对以及日期和由谁来写。它需要强制性的主记录调整,但对跟踪工作很好。您可以通过触发器轻松地实现这一点。
发布于 2011-02-07 19:22:58
审核数据更改的最佳方法是通过数据库表上的触发器。在您的情况下,您可能只想更新最后一个进行更改的人。或者,您可能需要一个完整的审计解决方案,在其中存储前面的值,以便在错误时很容易地还原它们。但关键是要在数据库上,而不是通过应用程序来实现这一点。数据库更改通常是通过应用程序以外的源进行的,您可能想知道是否也发生了这种情况。假设有人入侵了数据库并更新了数据,您不希望能够轻松地找到旧数据,或者知道是谁做的,即使他或她是通过查询窗口而不是通过应用程序完成的?如果您需要一次获得大量数据,您可能还需要知道数据是否通过数据导入被更改。
https://stackoverflow.com/questions/4924119
复制相似问题