Это довольно распространенная проблема в моделировании данных. В основном это сводится к этому:
Вас интересует представление сейчас , представление в определенный момент времени или оба?
Например, если у вас есть служба, которая моделирует подписки, вам нужно знать:
- Какими услугами кто-то пользовался в определенный момент времени: это необходимо для того, чтобы определить, сколько нужно списать, посмотреть историю счета и т. Д .; и
- Какими услугами кто-то сейчас обладает: что он может получить на Сайте?
Отправной точкой для такого рода проблем является наличие таблицы истории, например:
- История обслуживания: идентификатор, идентификатор пользователя, идентификатор службы, дата начала, дата окончания
Объедините истории сервисов для пользователя, и вы получите их историю. Итак, как вы моделируете то, что они имеют сейчас? Самое простое (и наиболее денормализованное представление) - сказать, что последняя запись или запись с конечной датой NULL или текущей или будущей датой - это то, что они имеют сейчас.
Как вы можете себе представить, это может привести к некоторому грубому SQL, поэтому он выборочно деномрализуется, поэтому у вас есть таблица служб и другая таблица для истории. Каждый раз, когда Сервисы изменяются, создается или обновляется запись истории. Такой подход делает таблицу истории более похожей на таблицу аудита (еще один термин, который вы увидите в основном).
Это похоже на вашу проблему. Вам необходимо знать:
- Кто является действующим депутатом на каждое место в Палате представителей;
- Кто является нынешним сенатором для каждого места;
- Кто является действующим министром для каждого департамента;
- Кто является премьер-министром.
Но вам также необходимо знать, кто был каждой из этих вещей в определенный момент времени, поэтому вам нужна история для всех этих вещей.
Итак, 20 августа 2003 года Питер Костелло сделал пресс-релиз, и вам нужно было бы знать, что в это время он был:
- Член для Хиггинса;
- Казначей; и
- Заместитель премьер-министра.
потому что, возможно, кому-то может быть интересно найти все пресс-релизы Питера Костелло или Казначея, которые приведут к тому же пресс-релизу, но их невозможно отследить без истории.
Кроме того, вам может понадобиться узнать, какие места находятся в каких штатах, возможно, географические границы и т. Д.
Ничто из этого не требует изменения схемы, так как схема должна быть в состоянии справиться с этим.