Каков общий шаблон для архивных таблиц, которым необходимо сохранить исходные дочерние отношения - PullRequest
0 голосов
/ 24 августа 2011

Скажем, у меня есть таблица со многими дочерними отношениями 1-ко-многим (например, контактные номера), и у меня есть эквивалентная архивная таблица, которая соответствует столбцам обычной таблицы.

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

Это лучшее решение?

1 Ответ

1 голос
/ 24 августа 2011

Вот как я это делаю в нашей среде временной базы данных:

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

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

Valid_to в последней версии записи может быть установлена ​​максимальная доступная дата. Когда вставляется более новая версия записи, вы обновляете valid_to предыдущей версии, чтобы она была непосредственно перед valid_from новой записи (это не то же самое, чтобы избежать ошибок) ..

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

SELECT *
FROM table a
JOIN table b ON .....
WHERE <time you're interested in> BETWEEN a.valid_from AND a.valid_to
AND <time you're interested in> BETWEEN b.valid_from AND b.valid_to
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...