Oracle SQL: невозможно создать внешний ключ на основе индекса более одного столбца - PullRequest
0 голосов
/ 10 января 2020

Я не могу создать внешний ключ на основе индекса более одного столбца.

Добавление внешнего ключа возвращает ошибку:

ORA-02270: нет соответствующий уникальный или первичный ключ для этого списка столбцов.

Ниже кода:

CREATE TABLE test_ek_uk (NOOPER VARCHAR2(7) NOT NULL
                        ,NUMSEQ NUMBER NOT NULL
                        ,ANY_TEXT VARCHAR2(4000));

CREATE UNIQUE INDEX test_ek_uk_nooper_numseq ON test_ek_uk (NOOPER, NUMSEQ);


CREATE TABLE test_ek_fk (ID NUMBER UNIQUE NOT NULL, NOOPER VARCHAR2(7), NUMSEQ number);

ALTER TABLE test_ek_fk ADD CONSTRAINT test_ek_fk_FK FOREIGN KEY (NOOPER, NUMSEQ) REFERENCES test_ek_uk (NOOPER, NUMSEQ); 

1 Ответ

1 голос
/ 10 января 2020

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

Если у вас уже есть индекс, вы можете создать уникальное ограничение на основе этого индекса. Для вашего случая:

alter table test_ek_uk
  add constraint test_ek_uk_nooper_numseq unique (NOOPER, NUMSEQ)
  using index altest_ek_uk_nooper_numseq;

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

alter table test_ek_uk
  add constraint test_ek_uk_nooper_numseq unique (NOOPER, NUMSEQ);

Уникальный индекс создается в фоновом режиме при создании этого уникального ограничения.

...