Недавно утвержденный стандарт SQL: 2011 включает в себя функции, которые позволяют вам лучше справляться с такими проблемами, чем когда-либо прежде.
Не то, чтобы вы могли делать все, что хотелиделать на временной арене, но то, что было введено, действительно является довольно значительным улучшением.
Хорошая презентация об этом на http://metadata -standards.org / Document-library / Documents-by-number / WG2-N1501-N1550 / WG2_N1536_koa046-Temporal-features-in-SQL-standard.pdf .
Обратите внимание, что в его продукте SQL есть только один поставщик с разумной поддержкой этих функций, одиндругие, возможно, работают над этим, а третий открыл канал голосования для своих клиентов.
На сайте www.linkedin.com также есть дискуссионная группа «Temporal Data», посвященная именно вашей теме.
РЕДАКТИРОВАТЬ, пытаясь обратиться к «Любой совет о том, как этого добиться без временных баз данных?»
Не добавляйте только один тип даты / времени, столбецмн к вашим моделям.Первая причина, как вы указали, вторая причина заключается в том, что это решение также продвигается новым стандартом и будет способствовать переходу на механизмы, которые поддерживают новые функции, как только они станут доступны.
Поэтому добавьте ОБА в начало и конец столбца даты / времени.НЕ СДЕЛАЙТЕ ИХ НИЧЕГО.Новый стандарт требует этого для своих временных характеристик.Если конечный MIT (момент времени) все еще неизвестен, используйте самое высокое значение применимого типа времени, например 9999-12-31.
Вам НЕ НУЖНО создавать отдельные таблицы истории длякаждый атрибут ".В равной степени возможно иметь «одну таблицу сущностей», в которой хранится «история возникновения всей сущности».Недостатком является то, что будет трудно запрашивать, когда произошло изменение ACTUAL с каким-либо конкретным атрибутом (поскольку вы получаете новые исторические строки для любого изменения любого атрибута, возможно, копируя то же значение атрибута для большей частиатрибуты).«Одна таблица», вероятно, будет потребителем пространства, «отдельная история для каждого атрибута» может быть потребителем запроса времени ЦП.Это будет балансирование, и от того, где баланс точно зависит от вашей конкретной ситуации.
Не «добавляйте индексированный« текущий »столбец» в ваши таблицы.Во-первых, они не помогут вам перейти к новым функциям, когда они есть в вашем движке, а во-вторых, столбцы Y / N являются очень плохими различителями и, следовательно, очень плохими кандидатами для индексации.Я бы предпочел добавить ваш начальный или конечный показатель к индексу, поскольку можно ожидать, что он даст вам одинаковые выигрыши для «текущих» строк и лучший выигрыш для нетоковых строк всякий раз, когда вам нужно запросить эти.
Что касается применения ограничений базы данных, таких как неперекрытие периодов времени во временных ключах и включение периодов времени во временном RI, то вы просто сами по себе.Напишите необходимый код в триггерах, SPROC или коде приложения в порядке убывания предпочтений.
Было ли это более полезным?