При использовании базы данных, нормализованной по принципам 6NF, как вы храните данные исторических атрибутов?6NF и данные исторического атрибута
Пусть говорят, например, мы берем this example из @PerformanceDBA, но со следующим дополнительным требованием:
Мы должны хранить исторические данные для всех наших продуктов, мы должны быть возможность просто ввести дату и получить моментальный снимок атрибутов продукта в это конкретное время.
Более практический пример:
Предположим, что диски и процессора из приведенного выше примера являются виртуальными и пользователь может изменить емкость диска по своему желанию. Как мы можем изменить базу данных, чтобы мы могли извлекать атрибуты данного диска в любое время в прошлом (конечно, после даты создания), сохраняя при этом представление 5NF достаточно быстро.
Вещей я рассматриваю
- Добавьте столбец временной метки «ChangeDate» для каждой таблицы атрибутов (это приведет к довольно сложному запросу с подзапрос и присоединиться к каждой таблице атрибутов)
- Создайте отдельный * стол истории для каждой таблицы атрибутов (может привести к огромному количеству таблицы, так как у нас есть около 70 атрибутов, распределенных по 20 типам товаров)
- Дополнительно: добавить «текущий » столбец проиндексирован для каждой таблицы атрибутов, чтобы ускорить представление 5NF
Любая помощь приветствуется!
Edit: Я знаю, что понятие временных баз данных, однако проблема заключается в том, что для двигателя базы данных я работаю с (PostgreSQL) временное расширение еще не полностью реализованы. Любые советы о том, как достичь этого без временных баз данных?
Просто, чтобы предупредить вас, я пошел по дороге НЕ имея таблиц истории и используя цифры «от» и «до» на каждом ряду моих «сущностей». Это была самая большая ошибка, которую я совершил, и превратил проект в кошмар. Он взял на себя руководство человека, которого вы упомянули, PerformanceDBA, чтобы я понял, что такое база данных (т. Е. Не просто ведро для объектов). С тех пор я переписал проект, используя более традиционный подход (таблицы/представления истории), и он лучше во всех отношениях. Ладно, не так много аргументов, но вдаваться в подробности займет огромное количество документации. – Mark
Это сообщение, которое заставило меня начать с изменения того, как я смотрю на базы данных в целом (с точки зрения разработчиков программного обеспечения, с точки зрения DBA): - http://stackoverflow.com/questions/4491173/historical- auditable-database - Я не говорю, что неправильно делать то, что было предложено (используя «от» и «до» и никаких таблиц истории), но для меня это создало большой беспорядок, и я никогда не пойду вниз снова. – Mark