答案 0 :(得分:3)
如果您始终在一个测量会话中测量并存储所有参数,请转到设计1
。
如果很少存储和/或很少需要属性,那么将属性移动到单独的表中是有意义的。
如果您有位置和温度的独立传感器,请转到设计3
。
这是最有可能的,因为位置是由GPS
跟踪器测量的,温度和油位由车辆传感器测量,车辆传感器是独立的设备,测量在不同的时间进行。
您甚至可能需要为每个传感器添加一个单独的表(即,如果不同的传感器在不同时间测量气体和温度,则为它们制作两个表)。
如果您使用的液体清单在设计时间内未知(即某些第三种液体,如氢气),则将liquid
移动到单独的表格中(如在设计2
中)是有意义的或氦-3或其他任何他们将发明的东西将由车辆使用,您将需要跟踪它而无需重新设计数据库。)
当然,这不是一种可能的情况。
答案 1 :(得分:1)
如果你同时从传感器上读取第二个设计对我来说太过分了。如果您在不同时间阅读该信息,那么将信息分开是有意义的。
我会建议第一个设计。
答案 2 :(得分:0)
您的应用需要处理两类事情
有几点需要考虑:
- 我们如何找到抽象传感器概念的方法?我们的想法是,我们可以通过其属性识别和处理传感器实例,而不必知道它们在数据库中的位置。
- 最好将给定时间戳的所有测量值保存在单个“读取”记录中,或者每次读取时每个传感器保留一个记录,即使多个测量值都是成套的。
对最后一个问题的快速回答是,每条记录的单次阅读事件似乎更灵活;我们将能够以同样的方式处理同时进行系统轮询的两组测量,以及与前者不同的其他测量。即使现在,所有测量都是立即进行的,因此可以轻松添加传感器,而无需更改数据库模式 和以便以类似方式处理它们。
也许以下设计更贴近您的需求:
tblSensors SensorId PK Name clear text description of the sensor ("Oil Temp.") LongName longer description ("Oil Temperarure, Sensor TH-B14 in crankshaft") SensorType enumeration ("TEMP", "PRESSURE", "VELOCITY"...) SensorSubType enumeration ("OIL", "AIR"...) Location enumeration ("ENGINE", "GENERAL", "EXHAUST"...) OtherCrit other crietrias which may be used to identify/seach for the sensor. tblReads Readid PK DateTime SensorId FK to tblSensors Measurment INTeger value Measurement2 optional extra meassurement (maybe to handle say, all of a GPS sensor read as one "value" Measurement3 ... also may have multiple columns for different types of variables (real-valued ?)
除了上述内容之外,您还有一些表格,其中定义了各种类型传感器的“枚举”,并且应用程序逻辑的搭配将通过类似助记符的“键”来实现。这些枚举。例如
SELECT S.Name, R.DateTime, R.Measurement
FROM tblReads R
JOIN tblSensors S ON S.SensorId = R.SensorID
WHERE S.SensorType IN ('Temp', 'Pres')
AND S.Location = "ENG"
AND R.DateTime > '04/07/2009'
ORDER BY R.DateTime
这不会阻止您通过其ID调用传感器,也不会阻止您在同一结果行上对读取进行分组。例如
SELECT R1.DateTime, R1.Measurement AS OilTemp, R2.Measurement AS OilPress,
R3.Measurement AS MotorRpms
FROM tblReads R1
LEFT OUTER JOIN tblReads R2 ON R1.DateTime = R2.DateTime
LEFT OUTER JOIN tblReads R3 ON R1.DateTime = R3.DateTime
WHERE R1.SensorId = 17
AND R2.SensorId = 11
AND R3.SensorId = 44
AND R1.DateTime > '04/07/2009' AND R1.DateTime < '04/08/2009'
ORDER BY R3.Measurement DESC -- Sorte by Speed, fastest first