2017-03-22 24 views
1

我从头开始创建数据库,并且希望以清晰的方式记录数据库设计以供审阅/文档。因此,我想:表声明中指定键/索引的SQL Server语法

  • 名称我的主键PK_Foo_Bar表声明中(不像我如何申报我的索引)
  • 名称我的表声明
  • 内的外键FK_Foo_Baz将指定索引IX_Foo_Baz在我的表声明

这是我的一个简化查询:

CREATE TABLE FOO 
(
    Bar int NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    Baz int NOT NULL FOREIGN KEY REFERENCES Baz(ID) 
); 

CREATE INDEX IX_Foo_Baz ON Foo(Baz); 

回答

1

另一种选择找到的例子是这样的语法(直接定义约束“内联”与列定义 - 没有结束表定义):

CREATE TABLE FOO 
( 
    Bar int NOT NULL IDENTITY(1,1) 
     CONSTRAINT PK_Foo_Bar PRIMARY KEY , 
    Baz int NOT NULL 
     CONSTRAINT FK_Foo_Baz FOREIGN KEY REFERENCES Baz(ID) 
); 
+1

这实际上对于长表来说似乎更具人类可读性 –

+0

只是一个小小的更正:看起来该部分:*** CONSTRAINT PK_Foo_Bar(Bar)PRIMARY KEY ***实际上应该是*** CONSTRAINT PK_Foo_Bar PRIMARY KEY ***(其中因为声明连接到*** Bar声明而没有逗号分隔 –

+0

@DaniëlCamps:是的,你是对的 - 谢谢指出 - 修复了我的文章 –

1

指数应该是一个单独的行:

CREATE TABLE FOO ( 
    Bar int NOT NULL IDENTITY(1,1), 
    Baz int NOT NULL, 
    PRIMARY KEY PK_Foo_Bar (Bar), 
    FOREIGN KEY FK_Foo_Baz REFERENCES Baz(ID) 
); 

您可以在MSDN docs

+0

谢谢你的明确的例子。为什么指数应该是一个单独的行? –

+0

它是一个独立的实体,所以首先声明一个字段,然后声明一个索引。我已经添加了MSDN文档的链接。 – Doc999tor