【发布时间】:2023-03-10 21:54:01
【问题描述】:
我正在设计一个新的实验室数据库。我想将所有测试的原始结果存储在一起。然而,结果可以是单次测量或原始波形。 (转帖见页脚)
以下哪种情况是理想的(为什么)? ...或提供您自己的理想选择。
TEST
test_id*
(other TEST fields)
选项 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_rateRAW_POINT:raw_header* (FK)改成measurement_id* (FK)RAW_HEADER:不需要
选项 3: 将信号编码为 BLOB 测试(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 个字节吗?
blob 是否可以是打包的 Oracle 类型,以便 Oracle 本身可以读取值(即:获取最大值、最小值等)
注意:这是General Oracle Data Collection Storage 的转贴,提供了更好的开发选项。
【问题讨论】:
-
我喜欢选项 1,因为它将单个值和信号分开。我什至可以添加 raw_point_id 并将数据点的数量存储在 RAW_HEADER 中以更快地检索数据点。选项 2 结合了常用字段以将所有内容放在一个位置。关于选项3,如果我错了,请纠正我。 Oracle(而不是程序检索)很难解码存储在 BLOB 中的原始数据以用于其他计算。
-
一个典型波形中有多少个点?
-
4000 - 25000(见编辑的主要问题)
标签: database oracle database-design