Oracle заботится о ведении истории в отдельной (теневой) таблице. Вы можете сделать это для любой таблицы, так что вы также можете сделать запрос с объединением.

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

Однако - когда элемент редактируется или удаляется, мне нужно сохранить старые данные; Мне нужно, чтобы увидеть, какие данные были до изменения.

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

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

По сути, я должен быть в состоянии восстановить данные за любой момент времени.

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

valid_from
valid_to
edited_by

Если valid_to = 9999-12-31 23:59:59, то это текущая запись. Если valid_to равно valid_from, то запись удаляется.

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

Я могу избежать триггеров, используя расширение базы данных PostgreSQL. Это обеспечивает тип столбца с именем «period», который позволяет хранить период времени между двумя датами, а затем позволяет выполнять ограничения CHECK для предотвращения перекрывающихся периодов. Это может быть ответом.

Мне интересно, если есть другой путь.

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

Возможно, я мог бы сократить свою первоначальную реализацию, чтобы не беспокоиться о проверке непротиворечивости записей, которые не являются «текущими» - то есть надо только проверять ограничения на записи, где valid_to равен 9999-12-31 23:59:59. В конце концов, люди, которые используют исторические таблицы, похоже, не проверяют ограничения этих таблиц (по той же причине, вам нужны триггеры).

У кого-нибудь есть мысли по этому поводу?

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

Благодарю.

Ответы на вопрос(1)

Ваш ответ на вопрос