具有事件开始和结束时间的数据库设计

时间:2015-10-13 04:42:39

标签: database-design triggers

我有一个mysql数据库,其中有一个名为event_table的表,看起来像这样

var Schema = {
    event_start: DataTypes.DATE,
    event_end: DataTypes.DATE
}

现在,当我想查询我可以做的现有事件时

SELECT * FROM event_table WHERE event_end >= curdate() and event_start <= curdate()

我正在考虑添加一个名为if_existing_event的字段并编写一个每隔一段时间运行一次的小程序,并为该字段指定true或false。因此,将来我可以简化查询以成为

SELECT * FROM event_table WHERE if_existing_event = true;

我是否有办法设置触发器或使用数据库执行此操作?它是一种简化查询的推荐方法吗?

2 个答案:

答案 0 :(得分:1)

事件是否存在是一个衍生价值&#39;它是从event_start日期和event_end日期派生而来的。根据规范化规则,特别是第三范式,应从表中删除派生值。

然而,如果它产生显着的性能益处,则可以进行去标准化。但是,在你的情况下,因为它只是一个较小的比较,而且只有第一个条款&#39; event_end&gt; = curdate()&#39;如果失去正常化的好处,那么事实并非如此。

答案 1 :(得分:1)

每隔一段时间多久一次?假设你查询当前事件并且很多事件从现在起五分钟后结束。如果你从现在起十分钟后重新开始,他们很有可能会出现。最好的设计会在结果集不再是最新的瞬间从结果集中删除事件。

您在第一个查询中提供了解决方案。对视图进行定义,称为 Current_Events 。然后查询

select * from current_events;

将仅返回当前事件。在执行查询之前停止当前毫秒的事件将不会出现。

我是观众的好用户。对于大多数主要表格,我都不会想到几十个观点。这极大地简化了应用程序查询。

select  *
from    ViewThatPresentsDataJustTheRightWay;