sql – 福勒时间表达式的关系模式
Martin Fowler定义了一个优雅的对象模型,用于安排重复的任务
here,它非常好地映射到OO代码.然而,将其映射到关系数据库模式以进行持久性是棘手的.
任何人都可以提出封装他所描述的所有功能的模式SQL组合,特别是在第11页的图像中.相交和联合是相当明显的 – 复杂性在于表示“时间表达式”,它采用可变参数,必须以不同的方式进行解释,然后将它们组合成“时间集”. 要清楚,有很多方法来表示关系数据库中的重复事件的概念.我想让大家的输入是如何映射这个特定的模型. 一些可能的选择: >’Meta’表定义参数的数量和使用.丑陋,但可能是工作.但是,“时间表达”的形式只能是有限的,所以提供极大的灵活性可能太多了. 序列化参数列表并将结果存储在varchar()中不是解决方案,因为该方法可以防止基于集合的查询:) 解决方法我恐怕这个答案将会是很多的参考和很少的实用代码,而且自从我最后弄乱了这一点以来已经有一段时间了,但是…我想这里要混合的两种技术是‘active databases’和‘temporal databases’. 第一个对于评估规则等是有用的,第二个对于存储时间数据和在某个记录有效时进行评估是有用的.这两个都是相当大的研究领域,但是您可以使用简单的SQL来完成大部分时间性的东西(只要您的数据库有良好的时间支持). SQL中的活动部分更加困难,但PostgreSQL至少有一些规则可以帮助您.我不知道其他数据库,但大多数都有规则/触发器/约束支持,可以转换为您要查找的内容. 活动数据库是可以对其使用规则存储的事实的变化作出反应的数据库.这些规则以实现特定语言指定,但是对于每天的讨论Event-Condition-Action rules(ECA规则)是常见的.有关活动数据库系统的介绍,请阅读文章The Active Database Management System Manifesto和Active Database Systems.有关ECA规则的更多信息,请查看Logical Events and ECA Rules(页面与o_0)和Events in an Active Object-Oriented Database System相反. 事件处理是处理如何处理复合事件并适当地触发其操作的规则处理的特殊情况.有关这方面的有趣读物是Composite Events for Active Databases: Semantics,Contexts and Detection和Anatomy of a Composite Event Detector.另请参阅Complex Event Processing网站和Event Stream Processing和Complex Event Processing维基百科文章. 时间数据库可以看作是可以理解时间的数据库,特别是两种特定的时间;有效时间和交易时间.记录的有效时间是该记录有效的时间段,记录的交易时间是数据库中存在的时间.作为一个很好的实践介绍,我会推荐这本关于如何在SQL中编写时间数据库的书籍:Developing Time-Oriented Database Applications in SQL,Richard T. Snodgrass. Oterhwise,您可能想要了解的有关时间数据库的所有内容可以在Temporal Database Entries for the Springer Encyclopedia of Database Systems中阅读,这是一个非常全面的文档(我将从“时间数据库”入门)开始,但要开始更快一些,请查看Temporal Database Glossary更容易浏览和阅读,而出版物部分(或确实有…)的网站Time Center链接到该地区最着名的出版物. 所以,现在你知道这一切,你很快就会看到第11页上的图像可以表示为复合事件,并且可以被检测/评估,只要你已经实现了复合事件检测器的正确的所需子集,并且休息可以表示为具有时间方面的表中的条目:) 马丁·福勒(Martin Fowler)在他的Patterns for things that change with time中发表了自己的很多内容,总结了许多处理时间的模式. 最后,我可能为时间信息创建一个数据库模式,并使用活动部件的DB规则或在应用程序中实现该部分(有龙).如果您使用PostgreSQL,规则机制将在The Rule System部分文档中进行描述. 很多阅读,但如果你彻底了解所有这些,你的专业净值可以上涨相当多:) 另外,google的优点是“时间数据库”,“活动数据库”,“非洲经委会规则”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |