Внешний ключ, ссылающийся на представление в Oracle - PullRequest
17 голосов
/ 30 сентября 2010

Я пытаюсь сослаться на представление с внешним ключом, но получаю эту ошибку:

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

Однако я создал первичный ключ для этого представления и проверил его на вкладке Ограничения в TOAD.

Это таблица, которую я пытаюсь создать:

CREATE TABLE QUESTION
(   
    QUESTION_ID             INTEGER not null,
    CREATED_USER_ID         INTEGER not null,    
    CONSTRAINT PK_QUESTION  PRIMARY KEY (QUESTION_ID),
    CONSTRAINT FK_USER
        FOREIGN KEY (CREATED_USER_ID)
        REFERENCES SOME_VIEW(VIEW_ID)
);

SOME_VIEW - это представление, основанное на другом представлении, которое указывает на таблицу сотрудников в другой схеме.

Ответы [ 3 ]

15 голосов
/ 30 сентября 2010

Независимо от возможности создания внешних ключей для представлений, это действительно не лучшая идея для реализации.

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

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

0 голосов
/ 14 августа 2018

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

Это документация, которую вы должны прочитать: https://docs.oracle.com/cd/A97630_01/server.920/a96567/repmview.htm

0 голосов
/ 30 сентября 2010

Внешний ключ против представления, вероятно, является причиной проблемы.

...