Как отслеживать изменения в записи, охватывающей несколько таблиц

dba.stackexchange https://dba.stackexchange.com/questions/106587

Вопрос

Передо мной стоит задача разработать новую базу данных с использованием СУБД, точнее Oracle.В этой базе данных будет одна конкретная запись/документ, который может охватывать несколько таблиц.

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

я не хочу история таблица, которая будет суммировать изменения в тексте, потому что я хочу иметь возможность получить document x именно так, как это выглядело time t.Но я также не хочу иметь полную копию для каждой записи истории.

Здесь лучшие практики или шаблоны как этого добиться?

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

Это было полезно?

Решение

В частности, в Oracle 12c есть новая функция, называемая «временные флэшбэк-запросы», которая служит именно этой цели.(Аналогичные функции доступны и в других базах данных:DB2, SQL Server, Vertica и это лишь некоторые из них.)

Чтобы включить временные запросы, вы:

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

После этого вы сможете отправлять запросы к вашим таблицам, которые очень похожи на SELECT whatever FROM mytable AS OF some_date, который вернет записи, которые были активны на указанную дату.

Вы можете прочитать подробное описание здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top