Общая таблица результатов Oracle - PullRequest
1 голос
/ 25 июня 2009

Я создаю новую лабораторную базу данных. Мне нужны все необработанные результаты (для всех тестов) в одной таблице (RESULTS). Однако числовые значения сильно различаются по количеству и точности. Например, некоторые результаты представляют собой просто подсчет целых чисел, в то время как другие результаты получены от высокочувствительного оборудования.

Какой случай ниже идеален (и почему)?

Вариант 1. Сохраните каждый результат в столбце raw_result как НОМЕР с максимально возможной точностью.

OR

Вариант 2. Создайте таблицу RESULTS и несколько дочерних таблиц, каждая из которых представляет результаты схожего типа данных и столбец raw_result в виде NUMBER с определенной точностью для этого типа. (то есть: целое число от 1 до 1000, десятичное число до 6 десятичных знаков и т. д.)

Кроме того, в соответствующей статье Общее хранилище сбора данных Oracle я спросил об идеальном способе хранения необработанных сигналов в этой базе данных.

Ответы [ 2 ]

3 голосов
/ 25 июня 2009

Используйте опцию 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> 

Нет разницы в хранении. Сохраненная длина зависит от данных, а не от точности / масштаба определения столбца.

Эта ссылка дает довольно хорошее объяснение того, как хранится тип NUMBER. Это не так просто, как сравнение значений, чтобы получить представление о том, сколько памяти потребуется для данного числа. Например, для хранения числа 990 требуется 3 байта, а для хранения 9900 - только 2 байта.

1 голос
/ 25 июня 2009

Я бы сказал, это зависит от того, как вы собираетесь использовать данные позже. Первоначально вариант 1 будет проще в настройке, но если впоследствии вы всегда будете пытаться разделить данные для обработки / отображения и т. Д., То вариант 2 будет проще в долгосрочной перспективе.

DCookie хорошо объяснил, что у Варианта 2 нет технических преимуществ для хранения. Поэтому все сводится к любой обработке, которую вы собираетесь делать с ним.

Я хочу получить все необработанные результаты (для всех тестов) в одной таблице (RESULTS).

Если вы чувствуете, что имеет смысл поместить все это в один стол, тогда сделайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...