2

我正在寻找有关外键的信息....再次!...并且碰巧在 webschools.com 上注意到他们对同一件事有不同的例子。对于他们拥有的外键示例

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

现在..........

有什么不同?...

我怎么知道我应该为我的数据库使用哪一个?我有一种感觉,这将有助于解决我对 SQL 的很多困惑......

4

3 回答 3

2

效果上没有区别:它们实现了完全相同的东西。

我更喜欢内联版本,因为它使 fk 定义尽可能接近列定义。

还有第三种方式 - 一个单独的alter table声明(我认为这是“官方”方式):

alter table orders
add contraint fk_PerOrders 
foreign key p_id references persons(p_id);

您可能会发现某些数据库不支持一个版本或另一个版本。

于 2012-12-04T04:58:38.777 回答
1

他们都在做同样的事情。使用你觉得容易理解的那个。

于 2012-12-04T04:58:54.820 回答
1

都一样(三种方式):

  • 首先,您首先定义P_Idint然后定义的外键约束。
  • 其次,P_Id int FOREIGN KEY REFERENCES Persons(P_Id). P_Id是排便和外键约束排便在同一行。

  • 第三,a foreign key constraint name也是给fk_PerOrders。可以useful later when you wants to drop constraint。例如

ALTER TABLE 订单
DROP FOREIGN KEY fk_PerOrders

为约束命名总是好的做法。

于 2012-12-04T05:05:09.997 回答