在MySQL中创建联系人的历史日志

时间:2018-01-02 20:25:10

标签: php mysql logging

我正在和一些朋友谈论在MySQL中存储数据的“更新”方式,他们更多地谈论复制/编辑MySQL记录,而不是修改唯一的。

示例:

ID | NAME | EMAIL          | DATE_UPDATED         | STATUS
1    John   jon@email.com    2018-01-01 05:00:00    PUBLISHED

因此,当UPDATE命令通过而不是编辑记录1时,它会将记录复制到类似的内容中。

ID | NAME | EMAIL          | DATE_UPDATED         | STATUS
1    John   jon@email.com    2018-01-01 05:00:00    PUBLISHED
1.1  John   jon@email.com    2018-01-01 05:00:00    REVISION

这可能不完全,但类似的概念。我不确定这样的确切术语,但我相信它已成为当今大多数应用程序的标准。

我正在寻找最佳处理/创造这样的东西的方向。 MySQL触发? PHP重复记录等。以及如何处理SELECT语句,现在情况发生了变化。

1 个答案:

答案 0 :(得分:2)

像大多数“最好的方式......”问题一样,这里的答案是“它取决于”......

在详细介绍为什么会这样或那样的时候,一些最好的答案来自“你对未来的维护有什么理解和感觉?”

一张桌子:

有些项目受益于一种表格方法,因为它们更多地基于“交易化”数据集(例如,处理付款等 - 您需要知道对所发生的所有事情的完整跟踪)。

要收集最新值,只需使用'order by'执行MySQL查询,并且可能包含'limit 1'。

两个表(或更多):

我经常更喜欢多表系统,因为我们经常有一个表包含许多列的变量'profile'数据(userId,fname,lname,dob等),另一个包含其他'当前的'信息(信用等)

这些表可以是3-30列,如果试图只保留一个表(查找任何特定“列”的最新数据),则会变得非常混乱,因为事务可能会分散几天。

但是,我们仍然会保留一个事务表来跟踪更改(由谁,何时等)。通常这个表很简单

transID affectedID byID action timestamp

我们学到了什么,它可以在任何可能快速获得许多请求的表上使用毫秒时间戳(比如跟踪PHP中发生的各种后端进程),这样您就可以按时间排序。如果您使用常规时间戳,您将获得秒数,并且在那一秒内可能会有大量数据!