我担心这个答案会有很多参考资料和很少的实际代码,而且我最后一次涉及这个问题已经有一段时间了,但是...
我认为你想要混合的两种技术是
'活动数据库'和
'时间数据库'。
第一个对于评估规则等非常有用,而第二个对于存储时间数据并在某个记录有效时进行评估非常有用。这两者都是相当大的研究领域,但你可以在普通的SQL中完成大部分时间相关的工作(前提是你的数据库具有良好的时间支持)。在SQL中进行活动部分比较困难,但是
PostgreSQL至少有规则来稍微帮助解决这个问题。我不知道其他数据库情况如何,但是它们中的大多数都有规则/触发器/约束支持,可以转换为你所需要的内容。
活动数据库是可以使用规则对其存储的事实中的变化进行反应的数据库。这些规则用特定于实现的语言指定,但在日常讨论中,事件-条件-操作规则(ECA规则)很常见。要了解活动数据库系统的介绍,请阅读文章活动数据库管理系统宣言和活动数据库系统。有关ECA规则的更多信息,请查看逻辑事件和ECA规则(页面顺序相反 o_0)和活动面向对象数据库系统中的事件。
事件处理是规则处理的一种特殊情况,涉及如何处理复合事件并适时触发其动作。有关此内容的有趣阅读材料包括面向活动数据库的复合事件:语义、上下文和检测和复合事件检测器的解剖学。还可以参考复杂事件处理网站以及事件流处理和复杂事件处理维基百科文章。
时间数据库可以被视为能够理解时间的数据库,特别是两种具体的时间;有效时间和事务时间。记录的有效时间是该记录有效的时间段,而记录的事务时间是其存在于数据库中的时间。作为一个很好的实践介绍,我建议阅读Richard T. Snodgrass的书籍《在SQL中开发面向时间的数据库应用程序》。
否则,您可能想了解有关时间数据库的所有内容,可以阅读
Springer数据库系统百科全书中的时间数据库条目,这是一份相当全面的文件(我建议从“时间数据库”条目开始阅读),但为了更快地入门,请查看
时间数据库词汇表,它更容易浏览和阅读,以及
Time Center网站,其中的出版物部分(或曾经)链接到该领域中最显着的出版物。
因此,现在您已经了解了所有这些,您会很快发现第11页上的图像可以表示为复合事件,并且可以作为这样的复合事件检测器的必需子集的实现进行检测/评估,其余部分可以表示为具有时间方面的表中的条目:)
Martin Fowler在他的随时间变化的事物的模式中自己解决了许多这方面的问题,总结了许多处理时间的模式。
最后,我可能会为时间信息创建数据库架构,并使用DB规则进行活动部分,或在应用程序中实现该部分(不过要小心)。如果您使用PostgreSQL,则规则机制在文档的规则系统部分中进行描述。
虽然需要阅读的内容很多,但如果您能彻底理解所有这些内容,您的专业净值可能会大幅提高 :)
此外,可供谷歌搜索的好词汇包括“时间数据库”、“活动数据库”、“ECA规则”。