2012-07-14 79 views
0

我終於越過我已經無法找到答案的SO問題跌跌撞撞......數據庫設計 - 實體屬性值模型查詢

我的數據庫上工作,將保存錄制採樣隨時間記錄的數據。最初,客戶已經建立了一個對他們當前正在記錄的數據非常具體的表格,但是他們會擔心,隨着他們的擴展,收集到的數據可能會開始變化,並且更多或至少不同的列可能會需要。

電流模式:

+------------------+  +------------------+ 
| FACILITIES |  | DATA_RECORD | 
+------------------+  +------------------+ 
| ID    |  | ID    | 
| NAME    |  | FACILITY_ID  | 
| DESC    |  | TIMESTAMP  | 
| etc.    |  | TEMP_WATER  | 
+------------------+  | TEMP_AIR   | 
         | pH_WATER   | 
         | etc...   | 
         +------------------+ 

我認爲應該將數據庫設計如下:

+------------------+  +------------------+  +------------------+ 
| FACILITIES |  | DATA_RECORD |  | COLUMNS  | 
+------------------+  +------------------+  +------------------+ 
| ID    |  | ID    |  | ID    | 
| NAME    |  | FACILITY_ID  |  | NAME    | 
| DESC    |  | details etc.. |  | DESC    | 
| etc.    |  +------------------+  | UNITS, etc... | 
+------------------+        +------------------+ 

+------------------+ 
| DATA_POINT | 
+------------------+ 
| ID    | 
| DATA_RECORD_ID | 
| COLUMN_ID  | 
| VALUE   | 
+------------------+ 

我的問題是:

  1. 這是設計數據庫的最佳方式,還是有一種我不熟悉的更好的方式。
  2. 如何構成查詢語句以將每個數據記錄返回給每個相關列?
  3. 是否有一個普遍接受的良好數據類型用作DATA_POINT.VALUE?例如浮點數,小數點......?

非常感謝您的幫助。

真誠,

內特K.

回答

1

看你的要求,我想你會向實體 - 屬性 - 值類型的設計,這在一般是很難查詢扶着更多(儘管設置起來相當簡單),而且不具有可擴展性。

您可以在此網站或谷歌上搜索EAV模型以查看關於此的討論。

http://www.simple-talk.com/content/print.aspx?article=843

Entity Attribute Value Database vs. strict Relational Model Ecommerce

http://tkyte.blogspot.com/2009/01/this-should-be-fun-to-watch.html

對於你的情況,你可以張貼你需要收集不同類型的設備和數據點的?可能你可以使用類型和子類型來模擬這個?

+0

謝謝!第二個環節幫了很多忙。有一個相當詳細的前端隨着這個數據庫,所以我認爲選項3(從第二個鏈接)將是最好的解決方案 - _選項3,組合(模型實體「正確」,但爲自定義添加「擴展名」某些/所有實體的屬性)_。 – NateK 2012-07-14 02:03:47

+0

我也這麼認爲。祝你好運 :) – 2012-07-14 02:19:31