sql server中的完整性约束

时间:2013-04-14 18:57:53

标签: sql-server

我对完整性约束有疑问

这两个请求之间有什么区别:

Create table t1 (c1 foreign key references t2(c2), ...)

Create table t1 (c1 references t2(c2), ...)

1 个答案:

答案 0 :(得分:4)

没有区别;他们都会创建一个FOREIGN KEY约束。作为结果的底层元数据是相同的,当您为每个表编写脚本时,SQL Server将生成一个CREATE TABLE脚本,其中包含用于添加约束的单独ALTER TABLE ... ADD FOREIGN KEY语句。

第一种形式是首选,因为它是明确的;当你说FOREIGN KEY时,你知道它会是FOREIGN KEY;如果不这样做,对于那些不了解DDL语法的所有细微差别和可选元素的人来说可能不明确。

请注意,在这两种情况下,他们都会创建系统命名的 FOREIGN KEY约束(例如FK__t1__c1__35BCFE0AFK__t1__c1__37A5467C - 只是为了防止与其他人发生冲突而产生不必要的隐秘约束名称)。最佳做法建议您应明确命名约束,例如

CREATE TABLE dbo.t1
(
   c1 ...,
   CONSTRAINT fk_t1_t2 FOREIGN KEY(c1) REFERENCES dbo.t2(c2)
);