繁体   English   中英

“传感器系统”的最佳数据库设计

[英]Best database design for a “sensor system”

我正在做功课......

我必须做一个车辆跟踪系统。 我想到了这三个设计。 你怎么看?

我的数据库模式

(png at ImageShack~99KB)

意见?

  • 如果您始终在一个测量会话中测量和存储所有参数,那么请进行设计1

    如果很少存储和/或很少需要属性,那么将属性移动到单独的表中才有意义。

  • 如果您有位置和温度的独立传感器,那么请进行设计3

    这是最可能的,因为位置是由GPS跟踪器测量的,并且温度和油位由车辆传感器测量,车辆传感器是单独的装置并且测量在不同的时间执行。

    您甚至可能需要为每个传感器添加一个单独的表(即,如果不同的传感器在不同时间测量气体和温度,则为它们制作两个表)。

  • 如果您使用的液体清单在设计时间内未知,则将liquid移入单独的表格(如设计2 )是有意义的(即,某些第三种液体,如氢或氦-3或其他任何它们将会发明的将由车辆,您将需要跟踪它而无需重新设计数据库)。

    当然,这不是一种可能的情况。

如果你同时从传感器上读取,那么第二种设计对我来说就像是一种矫枉过正。 如果您在不同时间阅读该信息,将信息分开是有意义的。

我会建议第一个设计。

您的应用程序需要处理两种类型的事情

  • 传感器 =哪种类型,引擎中的位置,甚至是轮询频率等参数。
  • 读取 =来自一个(或几个?)传感器的单个时间戳记录。

有几点需要考虑:
- 我们如何找到抽象传感器概念的方法 我们的想法是,我们可以通过其属性识别和处理传感器实例,而不必知道在数据库中找到它们的位置。
- 最好将给定时间戳的所有测量值保存在单个“读取”记录中,或者每次读取时每个传感器保留一个记录,即使多个测量值成组也是如此。

对最后一个问题的快速回答是, 每条记录单个读取事件似乎更灵活 ; 我们将能够以同样的方式处理同时进行系统轮询的两组测量,以及与前者不同的其他测量。 即使现在,所有测量都立即进行,在不改变数据库模式 以类似方式处理传感器的情况下轻松添加传感器的可能性也很大。

也许以下设计更接近您的需求:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM