我正在寻找有关外键的信息....再次! ......并且碰巧在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的许多困惑......
答案 0 :(得分:2)
效果没有区别:他们完全一样。
我更喜欢内联版本,因为它使fk定义尽可能接近列定义。
还有第三种方式 - 单独的alter table
声明(我认为这是“官方”方式):
alter table orders
add contraint fk_PerOrders
foreign key p_id references persons(p_id);
您可能会发现某些数据库不支持某个版本或其他版本。
答案 1 :(得分:1)
所有人都在做同样的事情。使用您认为易于理解的那个。
答案 2 :(得分:1)
所有人都这样做(三种方式):
P_Id
定义为int
,然后定义外键约束。 第二,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
给约束命名总是好的做法。