我正在設計一個新的實驗室數據庫。我想一起存儲所有測試的原始結果。但是,結果可以是單個測量或原始波形。 (轉貼請參閱頁腳)在Oracle中存儲波形
下面哪種情況是理想的(以及爲什麼)? ...或提供您自己的理想選擇。
TEST
test_id*
(other TEST fields)
OPTION 1:獨立單值和波形產生
TEST (1 -- many) MEASUREMENT
(\-- many) RAW_HEADER 1 -- many RAW_POINT
MEASUREMENT RAW_HEADER
measurement_id* raw_header_id*
test_id (FK) test_id (FK)
rec_time as DATE start_time as DATE
measurement sample_rate
RAW_POINT
raw_header_id* (FK)
point_index*
raw_measurement
選項2:從選項重疊共用字段1
TEST (1 -- many) MEASUREMENT (1 -- many) RECORDING_POINT
同OPTION 1
除了:
MEASUREMENT
:measurement
爲信號是SAMPLE_RATE
RAW_POINT
:raw_header* (FK)
改變爲measurement_id* (FK)
RAW_HEADER
:不需要
OPTION 3:編碼信號轉換成BLOB TEST( 1 - 許多)測量
MEASUREMENT
measurement_id*
test_id (FK)
rec_time as DATE
measurement
signal as BLOB
對於單個值measurement
是測量和signal
是NULL
對於信號measurement
是SAMPLE_RATE和signal
存儲經編碼的數據點
方案4:重疊共同的字段,但使用BLOBS
TEST (1 -- many) MEASUREMENT (1 -- many) RAW_DATA
MEASUREMENT
measurement_id*
test_id (FK)
rec_time as DATE
measurement
RAW_DATA
measurement_id* (FK)
raw_data as BLOB
對於單個值measurement
是測量
對於信號measurement
是SAMPLE_RATE
圖例:
__*_
場其後是一個星號是 完整主鍵。(FK)
字段後跟(FK)
表示字段有外鍵約束。____
除非另有說明,所有字段的類型爲NUMBER
。
其他信息: 原始波形數據將通過多種方式使用: - 繪製(不情節看的權利) - 過濾/平滑(爲了更好的展示) - 獲取值(時間最大值,最小值,下降時間等)
此外,數據將通過多個通道同時採集。當頻道1首次達到500(某個單位)時,知道頻道2的價值是有用的。
波形通常有大約4,000-25,000個數據點。
其他想法/問題: BLOB的一部分可以返回嗎?換句話說,我能從字節4000開始抽出4個字節嗎?
團塊可以是一個打包的Oracle類型的,所以這些值可以由Oracle本身讀取(即:獲得最大值,最小值等)
注:這是General Oracle Data Collection Storage與轉貼更好的選擇。
我喜歡選項1,因爲它將單個值和信號分開。我甚至可以添加raw_point_id並將數據點的數量存儲在RAW_HEADER中以更快地檢索數據點。 選項2結合了常用字段將所有內容放在一起。 關於選項3,並糾正我,如果我錯了。 Oracle(而不是程序檢索)難以解碼存儲在BLOB中的原始數據以用於其他計算。 – Steven 2009-06-26 17:47:11
典型波形中有多少個點? – DCookie 2009-06-26 21:02:27