我正在开发一个存储传感器数据的系统。大多数传感器测量单个值,但有些传感器可以测量每个采样周期的多个值。我试图使我的数据库尽可能地标准化,而不会因查找大量样本数据而遇到性能问题。我的问题是如何设计传感器数据表来考虑可选的测量数据值。例如,传感器 A 只读取一个值,但传感器 B 读取 5 个值。如何将两组数据存储在数据表中?
选项 1 是创建一个平面结构,其中包含一个包含一堆列(value1、value2、value3...valueN 等)的表和一个记录使用了多少列的字段。我认为功能性但糟糕的设计:
Sensor Data
Sensor ID (Pk)
Timestamp (PK)
Columns Used
Value 1
Value 2
Value 3
...
Value n
另一种选择是高度规范化结构并拥有一个使用复合键存储单个数据值的数据表。它将跟踪传感器 ID、时间戳和数据类型以维护唯一值。这是高度标准化的,允许每个样本有无限数量的可选数据值,但会重复很多信息(特别是传感器 ID 和时间戳):
Sensor Data
Sensor ID (Pk)
Timestamp (Pk)
Data Type (Pk)
Value
这对于几千个样本来说并没有那么糟糕,但是该系统旨在存储数百万个传感器样本,并且加入这些值可能会遇到性能问题(即,传感器 ID 和时间戳相同但数据类型不同)。
有人对设计数据库来存储可选值有更好的想法吗?旁注:设计必须与 SQL Server 和实体框架 (EF) 一起使用。