При использовании базы данных, нормализованной в соответствии с принципами 6NF, как бы вы сохранили исторические данные атрибутов?
Скажем, например, мы берем этот пример из @PerformanceDBA, но со следующим дополнительным требованием:
Нам нужно хранить исторические данные для всех наших продуктов, мы должны иметь возможность просто ввести дату и получить снимок атрибутов продукта в это конкретное время.
Более практичный пример:
Предположим, что диски и процессоры из приведенного выше примера являются виртуальными, и пользователь может изменять емкость диска по своему желанию. Как мы можем изменить базу данных, чтобы мы могли извлекать атрибуты данного диска в любое время в прошлом (конечно, после даты его создания), сохраняя при этом представление 5NF достаточно быстро.
Вещи, которые я рассматриваю
- Добавьте столбец временной метки «changedate» в каждую таблицу атрибутов (это приведет к довольно сложному запросу с подзапросом и объединением для каждой таблицы атрибутов)
- Создайте отдельную * таблицу истории для каждой таблицы атрибутов (может привести к огромному количеству таблиц, поскольку у нас около 70 атрибутов, распределенных по 20 типам продуктов)
- Дополнительно: добавьте индексированный столбец «текущий» в каждую таблицу атрибутов, чтобы ускорить просмотр 5NF.
Любая помощь приветствуется!
Изменить: я знаю концепцию временных баз данных, но проблема в том, что для движка базы данных, с которым я работаю (postgresql), временное расширение еще не полностью реализовано. Есть какие-нибудь советы о том, как этого добиться без временных баз данных?