- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Martin Fowler 为重复性任务的调度定义了一个优雅的对象模型 here ,它非常好地映射到 OO 代码。然而,将其映射到关系数据库模式以实现持久性是很棘手的。
任何人都可以建议封装他描述的所有功能的模式 + SQL 组合,特别是在第 11 页的图像中。 相交和联合是相当明显的 - 复杂性在于表示“时间表达式”,它采用可变参数并且必须被解释不同,然后将它们组合成一个“时间集”。
需要明确的是,在关系数据库中有很多方法可以表示重复事件的概念。我希望每个人的意见是如何映射这个特定的模型。
一些可能的选择:
最佳答案
恐怕这个答案会有很多引用资料和很少的实用代码,自从我上次弄乱这个已经有一段时间了,但是......
我认为你想在这里混合的两种技术是 'active databases'和 'temporal databases' .
第一个对于评估规则等很有用,第二个对于存储时间数据并在某个记录有效时进行评估很有用。这两个都是相当大的研究领域,但是您可以在普通 SQL 中完成大部分时间性工作(前提是您的数据库具有良好的时间支持)。 SQL 中的事件部分更难,但 PostgreSQL至少有规则可以稍微帮助一下。我不知道其他数据库,但它们中的大多数都有规则/触发器/约束支持,可以转换为您正在寻找的内容。
事件数据库 是可以使用规则对其存储的事实的变化使用react的数据库。这些规则以实现特定的语言指定,但用于日常讨论 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 .
事件处理 是规则处理的一个特例,处理如何处理复合事件并适本地触发它们的 Action 。一个有趣的读物是 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。
另外,您可能想了解的有关时态数据库的所有信息都可以在 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 中描述。文档的一部分。
很多东西要读,但如果你彻底理解了这一切,你的职业净 Assets 就会增加很多:)
此外,谷歌的好术语是“时间数据库”、“事件数据库”、“ECA 规则”。
关于sql - Fowler 时间表达式的关系模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/310963/
我有以下格式的一些数据: 薪水 代码及时 1690 09:03:00 1690 09:13:00 1690 09:07:00 1691 08:48:00 1691 08:52:00 1691 08:5
在基于 jsp 和 servelet 的 Web 应用程序中实现类似 cron 的调度程序的最佳方法是什么?使用“定时器服务”遇到了一个选项。任何其他替代方案或对计时器服务的任何评论? 提前致谢 沙米
好吧,我对 MySQL 和数据库总体来说还很陌生。我想在一段时间后对数据库进行更新。让我解释一下。 所以为了练习,我正在用 php 构建一个游戏,在这个游戏中你将能够升级东西。比如说一栋建筑,从1级升
我想为每个用户创建一个典型的学校时间表。 最终产品应如下所示: +----+---------+---------+-----------+----------+--------+ | h | Mo
我的表格: timetable +----+---------+-------+--------+---------+---------+------+ | id | user_id | s_day
我的网站涉及安排重复类(class)和事件。目前,我已经使用 php 和 javascript 构建了一个表,该表逐个时间段扫描我的 mysql 数据库,每天查看是否有安排的事件或时间段是否空闲。 它
我有一个关于日程安排的问题。我需要为约会制作一个时间表生成器。这是目前的情况。 P1 与 P2 有约会 A。 P3和P4有个约会B。 等等…… 预约 A 大约需要 15 分钟 B约需40分钟 (时长视
我有一个配置如下的 celery 时间表: CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.
我想在“每个月的最后一天 10:15”和“每个月的第一个星期日”运行 spring scheduler 作业 - 我在下面尝试过 - 但它在初始化 spring 上下文时出错: org.springf
如何在运行时检查 openmp 计划? 我使用并行循环和运行时计划编译我的代码 #pragma omp parallel for schedule(runtime) collapse(2) for(j
我已经制作了一个 Android 应用程序,并且它已成功编译,没有任何错误。但是当我在 Android 手机中运行应用程序时,它不会显示所需的输出。 这是我的 MainActivity.java: p
经过一天的痛苦,我终于将数据放入了日程安排事件中。 我现在尝试在单击事件时设置事件,它使用数据变量加载新页面。 这是 xhtml 还有 Java public void redirec
我正在使用 Primefaces Schedule 组件在我的网络应用程序中呈现事件。但我需要对他耍点小花招。对于每个呈现的事件,我需要显示一个包含事件详细信息的工具提示。使用 window.onlo
我想设置一个 crontab 表达式,每 20 分钟启动一次作业,并且它将按照时间表运行 周一至周五上午 7 点至 30 点至晚上 8 点,周六上午 7 点至 30 点至下午 4 点 到目前为止我有以
这是我根据用户输入创建表格的代码: const err = "the valid input is a number between 5 and 20, please refresh your pag
有没有办法在 HighCharts 中制作与此类似的时间线/时间表? https://developers.google.com/chart/interactive/docs/gallery/time
在关于 AES key 表的教程中,我看到 key 表的操作(旋转、rcon、s-box)应用于一个 4 字节的字。你能解释一下这个字从哪里来吗?我明白我从 128 位长的 key 中提取它。 key
SQL Server 作业/时间表 - 美国与英国夏令时调整 我们有一个基于英国的服务器,它需要在 16:30(美国中部时间 - 这可能看起来很奇怪,但这是因为一些数据的可用性)运行 SQL 代理作业
我有一个 quartz 作业,每天下午 3 点(服务器时间)运行。我想做的是让它在下午 3 点运行,但针对美国的每个时区。 quartz 作业会触发一封电子邮件给我的用户,我希望每个人都能在他们的时间
我想以一种非常简单的方式展示电视指南时间线,但我对此真的很陌生,所以我希望有人可以帮助我,我不想要太复杂的东西,而且我已经在网络上搜索并且我发现非常复杂的时间线,有很多我真的不需要的功能,我只想显示当
我是一名优秀的程序员,十分优秀!