如何在mysql中启用时态数据库功能。?

Zeu*_*eus 7 mysql database-design mysql-5.5

如何在mysql数据库中启用时态数据库兼容性

是否有任何library或一个plug-in启用时间向上兼容性?我想在当前记录发生变化时保留过去的记录。

Nei*_*gan 6

  1. 添加一个 from_date 字段和一个可为空的 to_date 字段

  2. 扩展您的主键以包含 from_date

  3. 将所有内容保留为 UTC

  4. 考虑使用 PostgreSQL,因为有时间扩展可以防止时间段重叠。

这是“THE”temporal db Guy (Snodgrass) 写的书:

http://www.cs.arizona.edu/~rts/tdbbook.pdf

另请尝试 Celko 的《Smarties》书的第 4 章


小智 6

您所要求的正是 MariaDB 10.3.x 中的内容,称为“系统版本表”

自版本 10.3.16 起,它处于稳定版本。但请注意 mysqldump 实用程序可能无法正确备份数据。

https://mariadb.com/kb/en/library/system-versioned-tables/

信息:

系统版本表是 SQL:2011 标准中首次引入的一项功能。系统版本控制表存储所有更改的历史记录,而不仅仅是当前有效的数据。这允许对任何时间点的数据进行分析,审计变化并比较不同时间点的数据。典型用例是:

  • 取证分析和法律要求存储数据 N 年。
  • 数据分析(回顾、趋势等),例如获取一年前的员工信息。
  • 时间点恢复 - 恢复特定时间点的表状态。


Abd*_*naf 2

时态数据库是具有内置时间方面的数据库,例如时态数据模型和结构化查询语言的时态版本。

更具体地说,时间方面通常包括有效时间和交易时间。这些属性结合在一起形成双时态数据。

1.有效时间是指事实相对于现实世界为真的时间段。

2.事务时间是事实存储在数据库中的时间段。

3.双时态数据结合了有效时间和交易时间。

更新

首先,我删除了之前作为 MySQL5.1 添加的部分,其以上版本的 MySQL 不支持BDB。请查看此链接。但在我看来,所做BDB的事情InnoDB是能够完成所有操作的。由于MySQL不再支持BDB。但是InnoDB能够完成BDB正在做的所有事情。

有关时态数据库的更多信息,请查看

对于MySQL,CHECK CONSTRAINT、的不可用DEFERRED CONSTRAINT以及 的一些限制triggers使得temporal relational database architecture在 MySQL 中构建变得更加困难。

检查约束

检查约束通常采用 CHECK( [NOT] EXISTS( select_expression )) 形式

MySQL在INNODB表中实现了外键约束,但尚未实现CHECK CONSTRAINT。在此之前,必须通过其他方式强制执行此类约束。这会给时间有效的表带来严重的后果。一些时间有效的约束可以在触发器中强制执行,但我们将考虑的大多数时间约束却不能。在 MySQL 实现 CHECK CONSTRAINT 之前,必须在应用程序代码中强制执行它们。这是一个很重的处罚。

延迟约束

MySQL 也还没有实现延迟约束。此外,约束是按行应用的,而不是在提交时应用。这给许多复杂的约束(甚至一些简单的约束)带来了问题。例如,要删除通过外键引用自身的MySQL行,您必须临时设置foreign_key_checks = 0。满足复杂约束的事务必须使数据库处于一致状态。但是关系数据库理论中没有任何内容表明这一点在事务中的每个语句之后,数据库应该处于一致的状态。

触发器

MySQL 5 触发器不能在触发器表上发出 UPDATE 语句,也不能引发错误。这些限制为在 MySQL 中实现事务有效性带来了困难,但这些困难是可以克服的。