0

无法创建/找到在子表中引用父表复合 PK 列的列上应用 FK 的逻辑。

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 建议我如何结合这种逻辑。

谢谢。

4

2 回答 2

2

你不能。

正如错误所说,该列列表没有匹配的主键;你必须有一个。你有三个选择:

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

  2. 将 PROD_NAME 添加到 PURCHASE 表中。

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

于 2013-07-29T13:05:17.597 回答
1

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

HTH。

于 2013-07-29T13:04:09.370 回答