数据库设计问题

时间:2010-08-28 15:56:26

标签: database database-design

我正在为建筑物监控系统进行数据库设计。它有点像这样: 有一幢建筑物。建筑物有多个区域,可以包含记录器或实时馈送传感器组。记录仪有一个传感器,它的数据由手机收集,然后再下载到系统中。

例如:

Building:
    + Area1:
          Cold room 1 (Logger)
          Cold room 2 (Logger)
          + Freezer 1 (Live monitoring):
                Live sensor 1
                Live sensor 2

记录器具有存储在数据库中的读数,实时监控传感器也是如此,读数可以生成警报。

我的问题是记录器和实时监控传感器非常相似,但由于它们存在于层次结构的不同层次,我发现很难以一种看起来很好的方式进行建模。这是我到目前为止所提出的。这只是一个模仿玩具的想法,很多人缺失:

http://thejunkroom.co.uk/~marks/db1.png

我知道的一点点混乱......

遗憾的是它不可能是这样的:

Building:
    + Area1:
          + Foo
                Cold room 1 (Logger)
                Cold room 2 (Logger)
          + Freezer 1 (Live monitoring):
                Live sensor 1
                Live sensor 2

那时它可能更像是这样:

http://thejunkroom.co.uk/~marks/db2.png

但唉,不是这样的。

那么,有更好的设计吗?

我希望这有点意义..

谢谢, 标记

1 个答案:

答案 0 :(得分:3)

这样的事情怎么样?

具有子类关系的第二个结构......

Building
  BuildingId   pk
  BuildingName
  etc

Area
  AreaId      pk
  AreaName
  BuildIngId  fk -> Building  
  etc

Location
  LocationId         pk
  LocationType (LiveMonitor, Logger, Handprobe)  pk
  LocationName
  AreaId       fk -> Area
  etc

LiveMonitorLocation
  LocationId  pk, fk -> Location
  LocationType ConstantValue = LiveMonitor  fk ->  Location    

LoggerLocation
  LocationId   pk, fk -> Location
  LocationType ConstantValue = Logger  fk ->  Location    


HandprobeLocation
  LocationId   pk, fk -> Location
  LocationType ConstantValue = Handprobe fk ->  Location    

Logger
  LoggerId     pk
  LocationId   fk -> LoggerLocation
  SensorId     fk -> Sensor

Handprobe
  HandProbeId  pk
  Locationid  fk -> HandprobeLocation

Sensor
  SensorId     pk

LiveMonitorSensors
  SensorId     pk, fk -> Sensor
  LocationId   pk, fk -> LiveMonitorLocation

SensorReadings
  SensorId     pk, fk -> Sensor
  ReadingUtc   pk
  ReadingValue data