センサーデータを保存するシステムに取り組んでいます。ほとんどのセンサーは単一の値を測定しますが、サンプル期間ごとに多くの値を測定できるセンサーもあります。多くのサンプル データを検索する際にパフォーマンスの問題が発生することなく、データベースを可能な限り正規化したままにしようとしています。私の質問は、オプションの測定データ値を考慮してセンサー データ テーブルを設計する方法です。たとえば、センサー A は 1 つの値のみを読み取りますが、センサー B は 5 つの値を読み取ります。両方のデータ セットをデータ テーブルに格納するにはどうすればよいですか?
オプション 1 は、一連の列 (value1、value2、value3...valueN など) と、使用されている列の数を記録するフィールドを持つテーブルを使用して、フラットな構造を作成することです。私の意見では、機能的だが悪いデザイン:
Sensor Data
Sensor ID (Pk)
Timestamp (PK)
Columns Used
Value 1
Value 2
Value 3
...
Value n
The other option is to highly normalize the structure and have a data table that uses a composite key to store individual data values. It would track the sensor id, timestamp, and data type to maintain unique values. This is highly normalized and allows for an unlimited number of optional data values per sample, but duplicates a lot of information (specifically, sensor id and timestamp):
Sensor Data
Sensor ID (Pk)
Timestamp (Pk)
Data Type (Pk)
Value
This wouldn't be that bad for a few thousand samples, but this system is designed to store millions of sensor samples and joining those values could suffer performance problems (i.e. WHERE Sensor ID and Timestamp are equal but the Data Type is different).
Anyone have a better idea for designing a database to store optional values? Side note: the design has to work with SQL Server and Entity Framework (EF).