Это НЕ ПРОСТО.
Вы по существу запрашиваете временную базу данных (то, что Кристофер Дауна называет шестую обычную форму или 6NF).
Для того чтобы быть 6NF, схема должна быть также 5NF, и, в основном, для каждой точки привязки вам необходимо прикрепить временной диапазон, для которого применима привязка к такому значению. Затем в соединениях соединение должно включать только строки, находящиеся в пределах рассматриваемого временного диапазона.
Временное моделирование сложно - это то, что 6-й адрес нормальной формы - и не поддерживается в текущих РСУБД.
Проблема заключается в детализации. 6-я нормальная форма (как я ее понимаю) поддерживает временное моделирование, делая каждый не ключ (не ключ:, т. Е. Что-либо "на" сущности, которая может измениться без того, чтобы сущность потеряла свою личность) отдельное отношение. Для этого вы добавляете временную метку, временной диапазон или номер версии. Включение всего соединения решает проблему детализации, но это также означает, что ваши запросы будут более сложными и медленными. Это также требует выяснения всех ключей и неключевых атрибутов; это, как правило, большое усилие.
В принципе, везде есть отношение («Ted владеет фондовый сертификат GM с идентификатором 789») при добавлении времени: «Ted владеет фондовый сертификат GM с идентификатором 789 теперь», так что вы можете одновременно сказать, «Фред владеет сертификатом акций GM с номером 789 с 3 февраля 2000 года по вчерашний день». Очевидно, что эти отношения много-ко-многим, (теперь ted может владеть более чем одним сертификатом, а также более одного за всю свою жизнь), и fred может владеть владельцем сертификата сейчас.
Таким образом, у нас есть таблица владельцев и таблица сертификатов акций, а также таблица «многие-ко-многим», которая связывает владельцев и сертификаты по идентификатору. Для таблицы «многие ко многим» мы добавляем start_date и end_date.
Теперь представьте, что каждое государство/провинция/земельные налоги выплачивают дивиденды по сертификатам акций, поэтому для целей налогообложения необходимо зарегистрировать состояние владельца владельца акта.
Если владелец находится, очевидно, может изменяться независимо от владения акциями; ted может жить в Небраске, покупать 10 акций, получать дивиденды, что налоги в Небраске, переехать в Неваду, продавать 5 акций в fred, покупать еще 10 акций.
Но для нас это Ted может перейти в Небраске на некоторое время, купить 10 акций на некоторое время, получить дивиденды на некоторое время, какие налоги Небраска, перейти к Neveda на какое-то время , продать 5 акций fred в некоторый момент, купить еще 10 акций в некоторый момент.
Нам нужно все это, если мы хотим рассчитать, какие налоги необходимы в Небраске и в штате Невада, объединившись в совпадающие/перекрывающиеся диапазоны дат в person_stockcertificate и person_address. Адрес человека уже не один-к-одному, он один-ко-многим, потому что это адрес во временном интервале.
Если ted покупает десять акций, мы моделируем событие покупки с одной датой покупки или добавляем date_bought к каждой акции? В зависимости от вопроса нам нужна модель для ответа.
SQL Server 2005 или 2008. Однако, если есть еще одна СУБД, которая имеет встроенное решение этой проблемы, я бы очень хотел услышать об этом. Thx – saille