2012-04-19 63 views
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之后,但在第二条语句中省略。

感谢您的帮助

回答

2

这在documentation:

如果您发现只有父表或视图,并省略列 名的记述,则外键自动引用主键 父表或视图。 外键和引用键的相应列或列必须按顺序和数据类型匹配。

+0

谢谢你的答案和链接。 – Richard77 2012-04-19 18:26:52

1

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

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

结论:总是在第一个示例中使用该语法并避免第二个示例。