我有一个关于完整性约束的问题
这两个请求有什么区别:
Create table t1 (c1 foreign key references t2(c2), ...)
和
Create table t1 (c1 references t2(c2), ...)
我有一个关于完整性约束的问题
这两个请求有什么区别:
Create table t1 (c1 foreign key references t2(c2), ...)
和
Create table t1 (c1 references t2(c2), ...)
没有区别; 他们都会创建一个FOREIGN KEY
约束。结果,底层元数据是相同的,当您为每个表编写脚本时,SQL Server 将生成一个脚本,其中包含用于添加约束CREATE TABLE
的单独语句。ALTER TABLE ... ADD FOREIGN KEY
首选第一种形式,因为它是明确的;当你说FOREIGN KEY
你知道这将是一个FOREIGN KEY
; 如果您不了解,那么对于不了解 DDL 语法的所有细微差别和可选元素的人来说,这可能是模棱两可的。
请注意,在这两种情况下,它们都将创建一个系统命名的 FOREIGN KEY
约束(例如FK__t1__c1__35BCFE0A
,或FK__t1__c1__37A5467C
- 不必要的神秘,只是为了防止与其他约束名称发生冲突)。最佳实践建议您应该明确命名您的约束,例如
CREATE TABLE dbo.t1
(
c1 ...,
CONSTRAINT fk_t1_t2 FOREIGN KEY(c1) REFERENCES dbo.t2(c2)
);