我在以PHP和MySQL开发的以市场研究数据库为中心的网站上工作.
它由两个主要部分组成-一个部分,用户在其中插入和更新自己的数据(例如,一个带有user_id字段的表T),另一部分,网站管理员可以插入新记录或更新现有记录(同一表).
显然,在某些情况下,最终用户将由管理员覆盖其数据,而在其他情况下,最终用户将更新管理员输入的数据(两种方法都可以).
要求是,如果最终用户最后一次更新某个字段,则用蓝色突出显示视图/编辑表单(例如),如果管理员要“责备”,则用红色突出显示.
我正在寻找一种有效且一致的方法来实现这一目标.
到目前为止,我有以下选择:
>对于表T中的每条记录,添加另一条记录(char(1)),如果最终用户插入/更新了该字段,则在其中写入“ U”;如果管理员这样做,则在其中写入“ A”.呈现视图/编辑表单时,请使用此信息突出显示每个字段.
>创建一个新表H,其中存储了包含诸如user_id,field_name,last_update_user_id之类的内容的编辑历史记录.在主表T中更新字段时,使表H为最新.呈现视图/编辑表单时,使用此信息相应地突出显示每个表单字段.
这些选项的优点/缺点是什么?你能建议别人吗?
解决方法:
我想这只是取决于您想要成为什么样的人.
您的第一种方法的优点是易于实现,更新和利用非常简单,并且只会稍微增加存储需求,但是就存储的信息量而言,这也是最低要求.
如果您采用第二种方法并存储了更完整的历史记录,那么将来如果需要添加“编辑历史记录”,则已经为此设置了一些东西,并且有大量数据在等待.但是,如果最终您不再需要这些数据,那将是一个浪费.
或者,如果您想要两全其美,可以将它们结合起来.保留完整的编辑历史记录,但还要更新主记录中的单字符标志.这样,您无需对历史进行任何处理即可找到最新的编辑内容,只需查看标志即可.但是,如果您确实需要完整的历史记录,则可以使用它.
就个人而言,我宁愿保留比我当时所需要的更多的信息.存储空间非常便宜,而且您永远都不知道何时会派上用场.我可能会比您提出的建议走得更远,并且也做到了,以便编辑历史记录可以跟踪它们的更改以及之前/之后的值.这对于调试非常方便,并且在将来根据项目的实际需求可能会很有用.