Я хотел бы сделать две вещи в PostgresSQL:
- строки версий в таблице по диапазону дат
- обеспечить целостность таблицы путем настройки внешних ключей одного столбца
Мне кажется, что я могу одновременно выполнять только одно из перечисленных действий.
Подробный пример:
Мне нужно версия содержимоготаблица на основе диапазона дат (поэтому в любой конкретный момент времени для уникального индекса (customId
, validFrom
, validUntil
) есть только одна строка (перекрывающихся диапазонов нет). но важно, чтобы ни один изэти столбцы уникальны сами по себе.
Используя этот метод, я могу запросить мою таблицу и получить действительный объект для любого момента времени, но я не мог понять, как связать эту таблицу с помощью клавиши customId
в другую таблицу, чтобы обеспечить целостность таблицы.
Проблема заключается в том, что ключ customId
не является уникальным, так как при записи нескольких диапазонов может быть более одного и того же ключа.
Одно решение, которое яраньше использовал создание другой таблицы x_history , когда меня интересует только последнее состояние объекта, и каждый раз копирую старое состояние в таблицу истории, но на этот раз это не сработаетхорошо, потому что я бы постоянно запрашивал две таблицы, так как «случайно» какую версию данных я интересуюсь во время выбора.
Пример по данным:
таблица a :
id
(PK) custom_id
(уникальный в любой момент времени через вышеуказанный составной уникальный индекс) valid_from
(отметка времени, сохраняющая начало действия a ) valid_until
(отметка времени, сохраняющая конец срока действия a )
таблица b :
id
(PK) a__custom_id
(уникально в любой отдельный момент времени) valid_from
(отметка времени, в которой хранится начало действия b ) valid_until
(отметка времени, сохраняющая конец срока действия b )
Я хотел бы вставить только те строки в таблицу b , которые
b.a__custom_id
существует в a.custom_id
b.a_custom_id
, b.valid_from
, b.valid_until
является уникальным