Записи базы данных - эффективные даты начала и окончания и внешние ключи - PullRequest
2 голосов
/ 18 июня 2009

Есть ли у кого-нибудь опыт работы с наборами данных, где записи становятся действительными и недействительными в зависимости от даты начала и окончания?Проблема заключается в том, что записи в этих таблицах имеют внешние ключи для других таблиц, которые также имеют действительные даты начала и окончания

Похоже, что вам придется в конечном итоге создавать новые записи практически для каждой таблицы, чтобы разрешить обновления внешнего ключа во время обслуживанияистория.

Пример:

--- Пэт ---Собака по имени Джаспер, владелец Джек из jan -> jun и продает Кену из jun -> end of time

--- Владелец ---Джек живет в Доме А с января -> февраля, затем Дом Б с февраля -> конец времениКен живет в Доме C с февраля по сентябрь, а Дом D с сентября -> конец времени

, поэтому, если в июне будет отчет по Джасперу, владелец будет Джек, проживающий в Доме B. Тот же запрос будет выполняться в сентябре.быть Кеном в Доме Д.

Как лучше всего моделировать эти отношения?И как выполнять «обновления» данных, чтобы поддерживать соответствующие отношения?

Ответы [ 2 ]

4 голосов
/ 18 июня 2009

Подход, который мы используем для решения таких проблем, заключается не в том, чтобы владеть элементами в одной и той же таблице, а в таблице сопоставления, включающей временные шкалы.

Table DOGS
 - ID
 - NAME

Table OWNER
 - ID
 - NAME

Table LOCATION
 - ID
 - HOUSE_NAME

Table DOGS_OWNERSHIP:
 - DOG_ID (FK->DOGS.ID)
 - OWNER_ID (FK->OWNER.ID)
 - START_TIME
 - END_TIME

Table OWNER_LOCATION
 - OWNER_ID (FK->OWNER.ID)
 - LOCATION_ID (FK->LOCATION.ID)
 - START_TIME
 - END_TIME

Таким образом, вы можете полностью сохранить владельца, местоположение и соответствующие сроки в двух таблицах.

Если владелец или местоположение изменяется, вы обновляете END_TIME текущего владельца / местоположения в соответствующей таблице временной шкалы и добавляете новую запись, начиная с текущего времени и нового времени окончания (конца времени).

Вы также хотели бы добавить некоторые ограничения, чтобы убедиться, что нет никаких перекрывающихся отображений, но это зависит от вашей бизнес-логики и предпочтений.

1 голос
/ 18 июня 2009

"Есть ли у кого-нибудь опыт работы с наборами данных, в которых записи становятся действительными и недействительными на основании фактической даты начала и окончания?"

Да, есть (но это почти 15 лет назад).

Хорошие новости: ваша проблема (которая связана с управлением временными данными) разрешима.

Плохие новости: ваша проблема не разрешима ни в одной существующей сегодня системе SQL и вряд ли станет решаемой в любой системе SQL, которая появится в будущем.

Для основополагающего подхода к этой проблеме я могу порекомендовать прочитать «Временные данные и реляционная модель» Лоренца, Дарвена и Даты.

Для прототипа реализации своих идей могу порекомендовать SIRA_PRISE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...