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

Database design 具有事件开始和结束时间的数据库设计,database-design,triggers,Database Design,Triggers,我有一个mysql数据库,其中有一个名为event\u table的表,如下所示 var Schema = { event_start: DataTypes.DATE, event_end: DataTypes.DATE } 现在,当我想查询现有事件时,我可以 SELECT * FROM event_table WHERE event_end >= curdate() and event_start <= curdate() 有没有一种方法可以让我设置一个触发器或

我有一个mysql数据库,其中有一个名为
event\u table
的表,如下所示

var Schema = {
    event_start: DataTypes.DATE,
    event_end: DataTypes.DATE
}
现在,当我想查询现有事件时,我可以

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

有没有一种方法可以让我设置一个触发器或者用db做些什么来实现这一点?这是简化查询的推荐方法吗

事件是否存在是从事件开始日期和事件结束日期派生的“派生值”。根据规范化规则,特别是第三范式,应该从表中删除派生值

然而,如果去规范化能够带来显著的性能好处,那么就可以进行去规范化。但是,在您的情况下,因为它只是一个比较少,而且只有当第一个子句“event\u end>=curdate()”为真时,才不会失去正常化的好处。

多久“每隔一段时间”一次?假设您查询当前事件,许多事件在五分钟后结束。如果你十分钟后再询问,他们很有可能还会出现。最好的设计是在事件不再是当前事件的瞬间将其从结果集中删除

您在第一次查询中提供了解决方案。对一个叫做“哦,类似时事”的视图进行定义。然后是查询

select * from current_events;
将只返回当前事件。在执行查询前仅毫秒停止为当前状态的事件将不会出现

我是一个伟大的用户的意见。对于大多数主要的表,我认为有几十个视图是没有意义的。这大大简化了应用程序查询

select  *
from    ViewThatPresentsDataJustTheRightWay;

您编写了mysql,但为sql server触发器添加了一个标记。sql server支持可用于此目的的计算列,我不知道mysql。我意识到我可以使用诸如sequelize之类的ORM生成虚拟字段getter和setter来实现这一点,而不是真正的字段。也许我根本不需要触发器或程序更新?是的,只是有多个查询条件,如日期、使用、使用人。。。因此,如果我没有想出那些虚拟场的机会,我可能会错过一些我不知道的东西。但无论如何,我认为我可以使用ORMs来想出虚拟场的getter和setter,我想这比创建一个新的场要容易得多。是的。只是想,在将来或其他人正在研究时,查询正确的内容可能会更容易,而不会遗漏某些内容。。
select  *
from    ViewThatPresentsDataJustTheRightWay;