0

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

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

但是,在其他时候,我看到了这个

CONSTRAINT FK_Supplier
  FOREIGN KEY (Supplier_id)
  REFERENCES Supplier

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

感谢您的帮助

4

2 回答 2

2

这在文档中有所描述:

如果仅标识父表或视图并省略列名,则外键会自动引用父表或视图的主键。外键和被引用键的相应列或列必须在顺序和数据类型上匹配。

于 2012-04-19T18:14:37.180 回答
1

关于 SQL 不忠实于关系模型的主要批评之一是对列顺序的依赖。然而,仅仅因为 SQL 包含非关系特性,并不意味着应该使用它们。事实上,我强烈认为应该避免使用这些功能,或者在无法避免的情况下减少此类功能。

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

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

于 2012-04-20T11:20:31.647 回答