【问题标题】:Best database design for a "sensor system"“传感器系统”的最佳数据库设计
【发布时间】:2010-12-05 09:56:04
【问题描述】:

我正在做功课,然后..

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

我的数据库架构

意见?

【问题讨论】:

    标签: mysql database model schema data-modeling


    【解决方案1】:
    • 如果您总是在一个测量会话中测量并存储所有参数,那么请选择 1 设计。

      仅当属性很少存储和/或很少需要时,将属性移动到单独的表中才有意义。

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

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

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

    • liquid 移动到一个单独的表中(如设计2)如果您使用的液体列表在设计时未知(即一些第三种液体,如氢或氦-3 或任何它们will invent 将被车辆使用,您需要在不重新设计数据库的情况下对其进行跟踪)。

      当然,这不太可能发生。

    【讨论】:

    • 非常感谢您的回答和考虑。有些概念现在对我来说更清楚了。
    【解决方案2】:

    如果您同时从传感器读取数据,那么第二种设计对我来说似乎有点矫枉过正。仅当您在不同时间阅读信息时,将信息分开才有意义。

    我会建议第一个设计。

    【讨论】:

    • 非常感谢您的回答。
    【解决方案3】:

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

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

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

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

    也许下面的设计会更接近你的需要:

    tbl传感器 传感器 ID PK 命名传感器的明文描述(“油温”) LongName 更长的描述(“机油温度,曲轴中的传感器 TH-B14”) SensorType 枚举(“TEMP”、“PRESSURE”、“VELOCITY”...) SensorSubType 枚举(“OIL”、“AIR”...) 位置枚举(“ENGINE”、“GENERAL”、“EXHAUST”...) OtherCrit 可用于识别/搜索传感器的其他标准。 tblReads 读取PK 约会时间 SensorId FK 到 tblSensors 测量整数值 Measurement2 可选的额外测量(也许要处理所有 将 GPS 传感器读为一个“值” Measurement3 ... 也可能有多个列用于不同类型的 变量(实值?)

    除了上述之外,您还有一些表格,其中定义了各种类型传感器的“枚举”,并且通过类似助记符的“键”与应用程序逻辑相关联这些枚举。例如。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2010-11-10
      相关资源
      最近更新 更多