一般Oracle结果表

时间:2009-06-24 20:30:47

标签: database oracle database-design

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

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

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

OR

选项2:创建RESULTS表和几个子表,每个子表代表相似数据类型的结果,raw_result列作为NUMBER,具有该类型的特定精度。 (即:1到1000之间的整数,十进制数到6位小数等)

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

2 个答案:

答案 0 :(得分:3)

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

选项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.

答案 1 :(得分:1)

我想说这取决于你以后如何使用这些数据。选项1最初将更容易设置,但如果您将在以后尝试将数据分开处理/显示等,那么从长远来看,选项2可能会更容易。

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

  

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

如果你觉得把它全部放在一张桌子里是最合理的,那就去做吧。