2009-06-24 56 views
1

我正在设计一个新的实验室数据库。我想要在一张表中使用所有原始结果(对于所有测试)(RESULTS)。但是,数值在数量和精度上差别很大。例如,某些结果只是整数,而其他结果则来自高度敏感的设备。General Oracle Results表

下面哪种情况是理想的(以及为什么)?

选项1:将每个结果存储在raw_result列中,作为允许的最高精度的NUMBER。

OR

选项2:创建RESULTS表和若干子表的类似数据类型的每一个表示的结果和一个raw_result列作为与特定的精度该类型的数。 (即:从1到1000的整数,十进制数到小数点后6位等)

此外,在相关的帖子General Oracle Data Collection Storage中,我问到了在这个数据库中存储原始信号的理想方法。

+0

按我自己的意见,选项1将更容易实现和维护,但我将失去大量数据存储在一个大型数据类型的效率很多。 – Steven 2009-06-24 20:31:59

回答

3

使用选项1.无论精度和规模如何,NUMBER都是Oracle的内部编号。

选项2似乎是一个可怕的维护噩梦从一开始,如果您决定改变其中一个值的精度,您会做什么?

编辑:为了说明,考虑:

SQL> CREATE TABLE testing (n1 NUMBER(38,12), n2 NUMBER(5)); 

    Table created 
    SQL> INSERT INTO testing VALUES (1, 1); 

    1 row inserted 
    SQL> INSERT INTO testing VALUES (990, 9900); 

    1 row inserted 
    SQL> INSERT INTO testing VALUES (1999999.999999, 1); 

    1 row inserted 
    SQL> SELECT n1, DUMP(n1) n1d, n2, DUMP(n2) n2d FROM testing; 

        N1 N1D        N2 N2D 
--------------------- ------------------------------ ------ -------------------- 
     1.000000000000 Typ=2 Len=2: 193,2     1 Typ=2 Len=2: 193,2 
    990.000000000000 Typ=2 Len=3: 194,10,91   9900 Typ=2 Len=2: 194,100 
1999999.999999000000 Typ=2 Len=8: 196,2,100,100,100  1 Typ=2 Len=2: 193,2 
         ,100,100,100       
    SQL> 

存储无差异。存储的长度与数据有关,而不是列定义的精度/比例。

This link给出了如何存储NUMBER类型的相当好的解释。这并不像比较这些值来了解给定数量需要多少存储空间。例如,它需要3个字节来存储数字990,但只有2个字节来存储9900.

+0

正确,只有一个音符,你只能有一定数量的字节,因此不同的数字可能需要不同的精度和音阶。 – 2009-06-24 20:41:54

1

我会说这取决于你以后如何使用数据。选项1最初设置起来会比较容易,但如果您以后总是尝试将数据分离出来进行处理/显示等,那么从长远来看,选项2可能会更容易。

DCookie在解释说Option 2对存储没有任何技术优势方面做得很好。因此它可以归结为你将要用它做的任何处理。

我想在一个表(RESULTS)中的所有原始结果(对于所有测试)。

如果你觉得把所有东西放在一张桌子上是最有意义的,那就这样做。