2017-03-22 13 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 ***(ステートメントがコンマ区切りなしの***バー***宣言に接続されているので理にかなっています –

+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

関連する問題