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