Ни один из них на самом деле не лучший (с точки зрения DBA). Лучше всего было бы (при условии Код ссылки является уникальным и, следовательно, первичный ключ):
Receivables:
RefNo
Date
ReceivableDollarVals:
RefNo
Type
Amount
Если Код ссылки/Дата является первичным ключом, добавить дату второй таблицы, а также.
Это позволяет свести к минимуму пространство для хранения для тех строк, которые не имеют всех трех типов (хотя сбережения минимальны). Затем вы используете предложения WHERE
, объединяющие две таблицы (или JOIN
s) для выполнения ваших запросов.
Он также позволяет вам добавлять другие типы по желанию без реструктуризации базы данных.
Однако вам нужно иметь в виду, что третья нормальная форма является идеалом. Довольно приемлемо нарушать правила, чтобы повысить производительность, если вы понимаете последствия.
100 000 записей на самом деле довольно мало, поэтому, если вы не думаете, что собираетесь собирать больше типов в ближайшем будущем, я бы выбрал вариант 2 и использовал нули для тех значений, которые не существуют. NULL, скорее всего, сделают ваши запросы немного более сложными.
Вы сказали «С единственной целью сообщить». Означает ли это, что данные выводятся в Oracle из какой-либо другой системы. Если это так, это означало бы, что дизайн не должен беспокоиться о нормализации для целей обновления/целостности. –