Oracle 为什么甲骨文没有';不允许在唯一索引上创建fk?

Oracle 为什么甲骨文没有';不允许在唯一索引上创建fk?,oracle,foreign-keys,unique-index,Oracle,Foreign Keys,Unique Index,我试图在oracle中创建fk,但遇到了ORA-02270问题。 通过谷歌搜索,我发现原因是你不能创建fk指向唯一索引。它必须是唯一的约束 我也读过 它很好地解释了索引和约束是不同的 我不明白的是,为什么oracle不允许在唯一索引上创建fk?我认为这是完全合理的。此外,我还尝试了Postgres,这样做没有问题。外键约束总是指oracle中的主/唯一约束 如果看到视图USER\u CONSTRAINTS,则会看到外键约束的R\u CONSTRAINTS\u NAME。它是主要/唯一的约束名称。

我试图在oracle中创建fk,但遇到了ORA-02270问题。 通过谷歌搜索,我发现原因是你不能创建fk指向唯一索引。它必须是唯一的约束

我也读过 它很好地解释了索引和约束是不同的


我不明白的是,为什么oracle不允许在唯一索引上创建fk?我认为这是完全合理的。此外,我还尝试了Postgres,这样做没有问题。

外键约束总是指oracle中的
主/唯一约束

如果看到视图
USER\u CONSTRAINTS
,则会看到外键约束的
R\u CONSTRAINTS\u NAME
。它是
主要/唯一的
约束名称。它不是唯一的索引

select * from USER_CONSTRAINTS where CONSTRAINT_TYPE = 'R';
唯一索引是与
完全不同的实体,您必须知道
索引
的语法也不是
创建表
内联语法的一部分


这就是oracle的操作方式,如果您想在创建了
唯一索引
的列上创建FK,那么我认为您不会介意在列上创建
唯一约束
,而不是
唯一索引
(Oracle将在创建
唯一约束
的列上内部创建
唯一索引
。因此两者都是相同的)但Oracle必须将约束放置在外键约束的
R\u约束名
中。(使用
R\u约束名
的示例对其进行简化)

约束是SQL标准和关系理论的一部分。索引不是。它可能是标准的一部分,但它不是。但是如果它是标准的一部分,那么标准仍然不应该混淆两个层次——抽象关系接口和它应该独立的实现。SQL称为FK(外键)引用唯一或PK(主键)。因此,如果DBMS符合,则必须这样做。但是,当您声明唯一约束时,DBMS将为您提供隐式唯一索引。(当您声明PK约束时,DBMS将为您提供隐式唯一非空约束和隐式对应索引。)

只有Oracle产品经理才能回答这个问题。但他们确实有一个记录,他们更喜欢经理觉得很酷的功能,而不是那些对开发人员有帮助的功能。