我正在设计一个新的实验室数据库。我希望所有原始结果(针对所有测试)都放在一个表(RESULTS)中。然而,数值在数量和精度上差别很大。例如,一些结果只是简单的整数计数,而另一些结果则来自高度敏感的设备。
下面哪种情况是理想的(为什么)?
选项1:将每个结果以允许的最高精度的数字存储在raw_result列中。
或
选项2:创建RESULTS表和几个子表,每个子表表示类似数据类型的结果,并创建一个raw_result列作为具有该类型特定精度的数字。(即:1到1000的整数,十进制数到6位小数,等等)
此外,在一篇相关的General Oracle Data Collection Storage文章中,我询问了在这个数据库中存储原始信号的理想方式。
发布于 2009-06-24 20:36:00
使用选项1。数字是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类型是如何存储的。这并不像通过比较这些值来了解给定数字需要多少存储空间那么简单。例如,存储数字990需要3个字节,而存储9900只需要2个字节。
发布于 2009-06-24 23:05:21
我想说,这取决于你以后如何使用这些数据。选项1最初将更容易设置,但如果您随后将始终尝试分离数据以进行处理/显示等,那么从长远来看,选项2可能更容易。
DCookie很好地解释了选项2对存储没有技术优势。因此,它可以归结为您要对其执行的处理。
我想要一个表(
RESULTS)中的所有原始结果(针对所有测试)。
如果您觉得将所有内容放在一个表中是最有意义的,那么就这么做。
https://stackoverflow.com/questions/1040805
复制相似问题