6НФ и исторические данные атрибутов

При использовании базы данных, нормализованной в соответствии с принципами 6НФ, как бы вы хранили исторические данные атрибутов?

Допустим, для примера мы возьмем этот пример от @PerformanceDBA, но со следующим дополнительным требованием:

Нам нужно хранить исторические данные для всех наших продуктов, мы должны иметь возможность иметь возможность просто ввести дату и получить снимок атрибутов продукта на тот конкретный момент времени.

Более практичный пример:
Предположим, что диски и процессоры из примера выше являются виртуальными, и пользователь может менять емкость дисков по своему усмотрению. Как мы можем изменить базу данных, чтобы мы могли получить атрибуты данного диска в любое время в прошлом (конечно, после даты его создания), сохраняя при этом достаточно быстрое представление 5NF.

Что я рассматриваю

  • Добавить столбец временной метки 'changedate' к каждой таблице атрибутов (это приведет к довольно сложному запросу с подзапросом и объединением для каждой таблицы атрибутов)
  • Создать отдельную таблицу *history для каждой таблицы атрибутов (может привести к огромному объему таблицы, так как у нас около 70 атрибутов, распределенных по 20 типам продуктов)
  • Дополнительно: добавить индексированную колонку 'current' к каждой таблице атрибутов для ускорения 5НФ представления

Любая помощь приветствуется!


Edit: Я знаю концепцию временных баз данных, но проблема в том, что для движка базы данных, с которым я работаю (postgresql), временное расширение еще не полностью реализовано. Посоветуйте, как добиться этого без временных баз данных?

6
задан ChrisR 25 January 2012 в 20:46
поделиться