无法创建/查找在子表中的列上应用FK的逻辑,该子列引用父表的复合PK中的列。
create table product(prod_id number,
prod_name varchar2(20),
price number,
constraint PK12 primary key(prod_id,prod_name));
创建表。
create table purchase(prod_id number,
purchase_price number,
constraint FK12 foreign key(prod_id) references product(prod_id));
create table purchase(prod_id number,
purchase_price number,
constraint FK12 foreign key(prod_id) references product(prod_id))
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list
Kinldy建议如何融入这种逻辑。
感谢。
答案 0 :(得分:2)
你不能。
由于错误显示该列列表没有匹配的主键;你必须拥有一个。您有三种选择:
从PRODUCT的主键中删除PROD_NAME。从表面上看,这似乎是合乎逻辑的解决方案,如果,为了使主键唯一,这不是必需的。
将PROD_NAME添加到PURCHASE表。
在PURCHASE.PROD_ID上创建唯一索引。如果它无论如何都是主要的候选人,这似乎是过分的。
答案 1 :(得分:1)
我怀疑这不是Oracle独有的。考虑到在引用的表中有一个复合主键,这意味着只有一个包含复合键的列不足以唯一地标识该表中的记录。因此,在一对多的外键关系中仅引用主键的单列是不可能的(例如,引用表中的一个记录可以在引用表中具有许多记录 - 具有FK的记录)。但是,如果要建立的关系是多对多的,这可能是可能的。
HTH。