Создать первичный ключ для таблицы с периодом (временная допустимость) в Oracle SQL - PullRequest
0 голосов
/ 12 марта 2020

У меня есть вопрос относительно первичного ключа для Oracle Таблица с периодом.

Я создал две таблицы, подобные следующим:

create table el_temporal_try( -- Parent Table
    id number(10) not null,
    ColumnA varchar(10),
    constraint el_temporal_try_pk primary key (id),
    period for valid_period
);
create table el_temporal_try_son( -- Son Table
    id number(10) not null,
    ColumnA varchar(10),
    parent_id number(10),
    constraint el_temporal_try_FY foreign key (parent_id) references el_temporal_try(id),
    period for valid_period
);

Этот сценарий успешно пройден. Однако у меня проблема со вставкой данных:

Я выполнил следующие два оператора вставки в родительскую таблицу:

1-й: оператор

insert into el_temporal_try 
(id, columnA,valid_period_start, valid_period_end)
values
(1,'A',sysdate - 10, sysdate - 9);

Результат:

1 строка вставлена.

2-й: оператор

insert into el_temporal_try 
(id, columnA,valid_period_start, valid_period_end)
values
(1,'B',sysdate - 8, sysdate - 7);

Результат

ORA-00001: уникальное ограничение (PBSVW.EL_TEMPORAL_TRY_PK) нарушено

Я понимаю, что это из-за столбца "ID". Тем не менее, мои проблемы из-за того, что эти две строки относятся к другому периоду, должны ли они быть разрешены?

Я намеревался использовать этот период для функции, чтобы захватить историю изменений записи в качестве альтернативы воспоминанию. Однако означает ли это, что в этой ситуации мне не следует использовать первичный ключ?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 12 марта 2020

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

На Oracle 12 c вы можете использовать идентификационные данные, подобные этой ссылке. https://www.oracletutorial.com/oracle-basics/oracle-identity-column/

В другой версии вы можете использовать последовательность и триггер, чтобы сделать это. https://chartio.com/resources/tutorials/how-to-define-an-auto-increment-primary-key-in-oracle/

0 голосов
/ 12 марта 2020

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

Большое спасибо !

...