跟踪数据库更改或使用时间戳区分记录?

时间:2017-07-27 13:50:31

标签: sql joomla change-tracking

跟踪数据库的变化必须成为许多人关注的重点,但看起来大公司都有软件。

我的问题是,对于一个包含10个表的小型SQL数据库,每个10列,使用连接创建“主”联结表:更新一些表有一个缺点通过添加行(包含大量重复信息)每年一次,然后使用MAX id(PK)生成并以网格形式在网站上发布最新数据(摘自“主”)?这与更新记录相比,我将在特定时刻丢失有关值的信息。

教师联系信息的典型行将包含fName,lName,schoolName,[address&电话信息];有关曲目或试奏信息:年份,乐器,作品,作曲家,出版商/版本。

其他人已经询问有关跟踪数据库更改的问题,但最近只有一项,而不是很多投票/详细信息: How to track data changes in a database table Keeping history of data revisions - best practice? How to track data changes in a database table

这个轻量级的解决方案似乎很有希望,但我不知道它是否没有得到选票,因为它没有帮助,或者因为人们不感兴趣。 How to keep track of changes to data in a table?

如有需要,可提供更多背景信息 我是一名音乐老师(即业余程序员),为我们的组织维护一个Joomla网站。我正在使用一个名为Sourcerer的Joomla插件来创建动态内容(PHP / SQL到Joomla数据库),以便更容易地进行更改(日期,人员,规则,保留曲目等)。多年来,这是通过静态页面完成的(以及纸质手册)需要几天时间才能更新。

然而,我也希望能够回顾并查看特定时间的数据库状态:谁教我们在哪里,哪些试镜片被列出等等,就像纸版本一样。注意:我没有跟踪HTML更改,只跟踪从数据库提供的信息。

感谢您的帮助! (我已经跟踪了多年,但这是我的第一个问题。)

我现在用来生成“主联结表”的代码。我会将此修改为“插入”我的新行,并通过Sourcerer从中查询以在线发布信息。

CFBundleShortVersionString

1 个答案:

答案 0 :(得分:0)

按顺序回答您的问题:

有缺点吗?

当然,和它的表现有关。如果你每年增加一百万条记录,那将会影响表现;占据磁盘上的空间。

关联问题中的建议哪些不好或者不受欢迎?

问答很好;但正确的答案取决于您的具体使用案例:您是出于法律原因,您希望能够以多快的速度访问数据,您拥有多少数据和更新,您希望历史记录功能在没有更改的情况下持续多久......只有在符合您的使用案例时才会投票。

根据经验,历史应该放在不同的表格中,这会带来几个好处:

  • 您当前的表格无法更改,因此除了在历史记录中存储当前版本外,您的代码无需更改;
  • 你的申请没有减速;
  • 如果您的历史记录表增长,您可以轻松地将它们移动到其他服务器;

为了选择是否有一个或多个历史表(每个备份表一个),取决于您计划如何检索数据以及您想要用它做什么:

  • 如果您镜像每个表添加时间戳和用户ID,您的代码几乎不需要修改;但是你最终会得到两倍的表,然后任何结构更改都需要在历史表中复制;

  • 如果您使用时间戳,用户ID,表名和记录的json表示构建单个历史记录表,您将更容易构建它,而对于检索它,您应该访问数据每行使用一个Object,即使用Joomla的dbo getObjectList(),那么对象将与您在历史表中存储的格式相同,并且那里的更改将相当容易。但是查询特定表/字段之间的更改会更加困难。

请注意,如果您无法正确检索数据,那么拥有数据是无用的。

由于您提到一年几次推送到网站,查询的开销不应成为问题(如果您每月更新,等待5分钟可能不是问题)。

您应该根据此数据的其他用途寻求最佳解决方案:因为它对任何人都有用,您必须实现一个系统来检索历史数据。如果phpmyadmin足够了,那么就不要再看了。

我希望这吓到你了。无论哪种方式,都需要付出很多努力。

如果您只想查找旧数据,可以改为存储您不时生成的标记/输出的副本,并将其保存到网络服务器上的不同文件夹中。这需要几分钟才能完成,并且非常可靠 当然,编码它会更有趣。但你真的确定你需要它吗?并且您可以保留数据库转储,以防有一天您改变主意。