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

bqucvtff  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(219)

我和一些朋友讨论了在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语句,现在事情已经改变了。

axkjgtzd

axkjgtzd1#

像大多数“最好的方式做…”的问题一样,这里的答案是“视情况而定”。。。
当我们深入了解为什么要这样或那样做的所有细节时,一些最好的答案来自于“您对未来的维护了解并感到舒服吗?”
一张table:
有些项目受益于单表方法,因为它们更多地基于一组“事务化”的数据(例如,处理付款等-您需要知道所有发生的事情的完整跟踪)。
要收集最新的值,只需使用“orderby”进行mysql查询,并可能包含“limit1”。
两张table(或更多):
我通常更喜欢多表系统,因为我们经常有一个表包含许多列可变的“profile”数据(userid、fname、lname、dob等),另一个表包含其他“current”信息(credits等)
这些表可以是3-30列,如果试图只保留一个表(为任何特定的“列”集合查找最新数据),则会变得非常混乱,因为事务可能会分散在几天内。
但是,我们仍然保留一个事务表来跟踪更改(由谁、何时等)通常这个表很简单

transID affectedID byID action timestamp

不过,我们学到的是,在任何可能快速获得许多请求的表上使用毫秒时间戳(比如跟踪php中发生的各种后端进程),这样就可以按时间排序。如果你使用常规的时间戳,你会得到秒,在这一秒里可能会有很多数据!

相关问题