我正在设计一个新的实验室数据库。我想一起存储所有测试的原始结果。但是,结果可以是单个测量或原始波形。 (转贴请参阅页脚)在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