创建外键时省略父表的列

时间:2012-04-19 18:01:11

标签: sql oracle foreign-keys

要在Oracle中创建外键,有时我会看到

CONSTRAINT FK_Supplier
  FOREIGN KEY (Supplier_id)
  REFERENCES Supplier(Supplier_id)

但是,有些时候,我看到了这个

CONSTRAINT FK_Supplier
  FOREIGN KEY (Supplier_id)
  REFERENCES Supplier

不同之处在于,列Supplier_id位于第一个语句中的表Supplier之后,但在第二个语句中省略了它。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

documentation:

中对此进行了描述
  

如果仅标识父表或视图并省略该列   name,然后外键自动引用主键   父表或视图。相应的一列或多列   外键和引用的键必须按顺序和数据类型匹配。

答案 1 :(得分:1)

对于不忠实于关系模型的SQL的一个主要批评是依赖列排序。但是,仅仅因为SQL包含非关系特性,并不意味着应该使用它们;事实上,我强烈认为应该避免这些特征,或者在不可避免的情况下,减轻这种特征。

标准SQL提供了一些语法来避免列排序依赖(NATURAL JOINUNION CORRESPONDING等)。其他语法有助于减轻这种依赖(例如INSERT INTO (<comma list of columns>) VALUES (<comma list of fields in same order>))。 FOREIGN KEY语法属于第二类。

结论:始终使用第一个示例中的语法并避免使用第二个。