2010-08-28 231 views
2

我正在進行建築物監控系統的數據庫設計。它有點像這樣: 有一個建築物。建築物有多個區域,可以包含記錄器或一組活動飼料傳感器。記錄器有一個傳感器,數據由手機收集,然後再下載到系統中。數據庫設計問題

因此,例如:

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

但可惜它不是這樣。

那麼,有沒有更好的設計呢?

我希望這是某種意義..

感謝, 馬克。

回答

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 
+0

感謝查爾斯 - 一件事,你的意思是有LoggerId FK->日誌房間?一個房間並不總是有一個記錄器 - 稍後,雖然我看到你把Log Room中的RoomId fk - > Room,這對於Loggers來說是我所需要的嗎? – Mark 2010-08-28 18:34:31

+0

有一個小問題 - 這個設計允許位置(或稱爲房間)具有記錄器*和*冷凍機 - 他們不需要這個。我應該嘗試在數據庫中限制這一點,還是僅僅依靠業務邏輯? – Mark 2010-08-28 18:38:10

+0

所以你說的「位置」既是記錄器又是冰箱的屬性?而不是我模擬它的方式?我會重做模型,以反映... – 2010-08-28 19:09:11