我有一个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;
我是否有办法设置触发器或使用数据库执行此操作?它是一种简化查询的推荐方法吗?
答案 0 :(得分:1)
事件是否存在是一个衍生价值&#39;它是从event_start日期和event_end日期派生而来的。根据规范化规则,特别是第三范式,应从表中删除派生值。
然而,如果它产生显着的性能益处,则可以进行去标准化。但是,在你的情况下,因为它只是一个较小的比较,而且只有第一个条款&#39; event_end&gt; = curdate()&#39;如果失去正常化的好处,那么事实并非如此。
答案 1 :(得分:1)
每隔一段时间多久一次?假设你查询当前事件并且很多事件从现在起五分钟后结束。如果你从现在起十分钟后重新开始,他们很有可能会出现。最好的设计会在结果集不再是最新的瞬间从结果集中删除事件。
您在第一个查询中提供了解决方案。对视图进行定义,称为 Current_Events 。然后查询
select * from current_events;
将仅返回当前事件。在执行查询之前停止当前毫秒的事件将不会出现。
我是观众的好用户。对于大多数主要表格,我都不会想到几十个观点。这极大地简化了应用程序查询。
select *
from ViewThatPresentsDataJustTheRightWay;