【问题标题】:FK on a single column referencing a column from composite PK单个列上的 FK 引用复合 PK 中的列
【发布时间】:2013-07-29 06:52:45
【问题描述】:

无法创建/查找逻辑以在子表中引用父表的复合 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 建议我如何结合这个逻辑。

谢谢。

【问题讨论】:

    标签: oracle database-design foreign-keys


    【解决方案1】:

    你不能。

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

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

    2. 将 PROD_NAME 添加到 PURCHASE 表中。

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

    【讨论】:

    • 我同意。我认为 PROD_ID 听起来是主键,也许 PROD_NAME 是唯一(业务)键。
    【解决方案2】:

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

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多