我正在构建一个系统,该系统将收集有关外部控制的工业过程的数据。这些数据将用于构建系统各个组件的使用情况统计信息。
简化示例:有一个打开和关闭的加热器,当它发生时我会收到通知。我需要记录它,并根据这些数据能够回答诸如“上个月加热器打开了多长时间?”之类的问题
我想到的是创建一个表,每次发生状态更改时我都会在其中插入一行,包括时间戳。
但是,在我看来,这将需要相当多的后处理,例如回答上面的示例问题。我认为无法仅使用 SQL 提取此类答案。
问题:有没有比我在这里描述的更适合、更有效的“存储模式”?
谢谢。
最佳答案
您可以存储加热器打开的时间,而不是离散的开/关事件。使用 time_on
和 time_off
列分别跟踪加热器何时打开和关闭,然后从 time_off
中减去 time_on
> 获取持续时间。
当加热器打开时:
insert into heater_usage (time_on, time_off) values (now(), null);
当加热器关闭时:
update heater_usage set time_off = now() where time_off is null;
使用唯一约束来确保没有两行对于 time_off
可以有 null
,作为基本检查以确保您不会留下没有 time_off
如果您的脚本未正确调用。您可以在打开加热器时检查它们,然后将其移除。
总结总时间:
select sum(time_off - time_on) from heater_usage;
关于sql - 在数据库中存储现实世界 "events"的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016896/