我试图用外键引用一个视图,但我收到此错误:
“错误:ORA-02270:此列列表没有匹配的唯一键或主键”
但是,我在此视图上创建了一个主键,并在TOAD的Constraints选项卡中对其进行了验证 .
这是我试图创建的表:
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是基于另一个视图的视图,该视图指向另一个模式中的employee表 .
3 回答
无论为视图创建外键的可能性,实际上都不是最佳实现 .
数据库视图旨在让用户轻松地查询他需要的一些数据,但同时充当安全屏障,隐藏所有数据库结构,包括表,表中的数据约束,以及表,交叉引用 .
因此,对我来说,一个好的做法就是从你的新 table 中引用现有的 table ,尽管它在其他方案中居住 .
您可以做的最好的事情是将SOME_VIEW实现为物化视图,因为您指向另一个模式 . 然后,您可以更改实体化视图以添加主键,甚至可以从外键中引用此视图 .
这是您应该阅读的文档:https://docs.oracle.com/cd/A97630_01/server.920/a96567/repmview.htm
反对视图的外键可能是造成麻烦的原因 .