【问题标题】:Can a foreign key reference another foreign key一个外键可以引用另一个外键吗
【发布时间】:2015-04-09 01:42:15
【问题描述】:

是否可以有一个外键引用另一个表中的另一个外键,还是只能引用主键和唯一键?

【问题讨论】:

  • 据我了解外键只能引用主键和唯一键

标签: sql oracle foreign-keys


【解决方案1】:

外键可以引用任何定义为唯一的字段。如果该唯一字段本身定义为外键,则没有区别。外键只是为了强制引用完整性。将字段设为外键不会以任何方式更改字段本身。如果是唯一字段,也可以是另一个FK的目标。

例如:

create table Table1(
     PK int identity primary key,
     ...
);
create table Table2( -- 1-1 relationship with Table1
     PKFK int primary key,
     ...,
     constraint FK_Table2_1 foreign key( PKFK ) references Table1( PK )
);
create table Table3( -- relates to Table2
    PKFKFK int primary key,
    ...,
     constraint FK_Table3_2 foreign key( PKFKFK ) references Table2( PKFK )
);

我知道没有 DBMS 不是这种情况。而且我同意马的观点,这种做法没有任何问题。

【讨论】:

    【解决方案2】:

    是否可以有一个外键引用另一个表中的另一个外键

    是的。事实上,与公认的答案相反,引用的 FK 列甚至不必是唯一的! - 至少在 MySQL 中。请参阅https://www.db-fiddle.com/f/6RUEP43vYVkyK2sxQQpBfj/0 以获得相同的演示。

    这提出了一个问题,如果 FK 在父表中不是唯一的,那么谁是父行? FK的目的是建立父子关系。

    【讨论】:

    • 有趣。但是在 Postgresql 的情况下,外键必须引用具有唯一约束的列。
    猜你喜欢
    • 2012-10-31
    • 2017-01-04
    • 1970-01-01
    • 2015-04-17
    • 2010-10-09
    • 2011-11-19
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多