单个列上的FK引用复合PK中的列

时间:2013-07-29 12:59:42

标签: oracle database-design foreign-keys

无法创建/查找在子表中的列上应用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建议如何融入这种逻辑。

感谢。

2 个答案:

答案 0 :(得分:2)

你不能。

由于错误显示该列列表没有匹配的主键;你必须拥有一个。您有三种选择:

  1. 从PRODUCT的主键中删除PROD_NAME。从表面上看,这似乎是合乎逻辑的解决方案,如果,为了使主键唯一,这不是必需的。

  2. 将PROD_NAME添加到PUR​​CHASE表。

  3. 在PURCHASE.PROD_ID上创建唯一索引。如果它无论如何都是主要的候选人,这似乎是过分的。

答案 1 :(得分:1)

我怀疑这不是Oracle独有的。考虑到在引用的表中有一个复合主键,这意味着只有一个包含复合键的列不足以唯一地标识该表中的记录。因此,在一对多的外键关系中仅引用主键的单列是不可能的(例如,引用表中的一个记录可以在引用表中具有许多记录 - 具有FK的记录)。但是,如果要建立的关系是多对多的,这可能是可能的。

HTH。