我正在建立一个用于监控设备的数据库,但我陷入了僵局。
我有 40 种不同类型的设备,每一种都记录不同的信息,并且有一些共同点(例如设备名称、采样日期)但大多不同的属性(例如 signal_50_100Hz、device_arm_attached)。
在我看来,有两种选择:
构建一个包含并耗尽所有设备的所有属性的大表。
- 缺点:并非所有设备都具有所有属性的值,并且并非所有属性都与所有设备相关。大部分表可能最终是空的,我可能必须构建一个表来记录每个设备的属性名称,以便生成合理的输出。
- 优点:拥有一张表大大简化了事情,并且使以后更容易聚合和汇总值,编写的 SQL 更少,更通用,更容易理解。
为每种设备类型创建一个单独的表,在每个表中分别列出每个属性。
- 缺点:每次拿到新设备都需要编写自定义SQL,rehash整个系统,没有通用接口。大量表要独立构建和管理。
- 优点:一切都简洁明了,如果需要,可以解耦以独立存在。没有额外的包袱,并且一种设备类型不会通过通用属性集与其他设备类型耦合。
该数据库的目的是不断地将来自这些监控设备的信息汇总到一个视图中,然后根据分析人员的需要进行查询。
我喜欢为每个设备创建不同的表,然后使用通用视图将这些表中的相关数据聚合成更可用和更通用的形式。这将允许我保留数据(为了保留),并根据需要从一个通用的、抽象的层、一个大视图中聚合它。
您认为这种方法有什么问题吗?哪种方法更有意义?我还可以采用哪些其他策略?有没有人对如何更好地解决这个问题有任何一般性建议?