Проблема проектирования базы данных - PullRequest
2 голосов
/ 28 августа 2010

Я работаю над дизайном базы данных для системы мониторинга зданий. Это выглядит примерно так: Там есть здание. Здание имеет несколько зон, которые могут содержать регистраторы или группы датчиков подачи в реальном времени. Регистратор имеет один датчик, и его данные собираются с мобильных телефонов, которые затем загружаются в систему.

Так, например:

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 Ответ

3 голосов
/ 28 августа 2010

Как насчет чего-то подобного?

Вторая структура с отношением подкласса ...

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...