2017-12-25 23 views
0

外部キーを使用してテーブルを作成する必要があります。SQL Server外部キーを使用してテーブルを作成するさまざまな方法

CREATE TABLE books 
(
    book_id NVARCHAR(15) NOT NULL UNIQUE, 
    author_id INT REFERENCES authors(author_id) 
    ... 
); 

しかし、大学から私の先生が私に外部キーを扱う別の方法を示す代表的なスクリプト送ら:これまでのところ私はこのようなことをやっているそれらの違いを見つけようとして

CREATE TABLE books 
(
    book_id NVARCHAR(15) NOT NULL UNIQUE, 
    author_id INT, 

    CONSTRAINT author_FK 
     FOREIGN KEY(author_id) REFERENCES authors(author_id) 
    ... 
); 

を、私は研究をしました。残念ながら、私は答えを見つけることができます、私は(1秒と非常によく似ている)外部キーを持つテーブルを作成するための別の方法だった見つけたもの:

CREATE TABLE books 
(
    book_id NVARCHAR(15) NOT NULL UNIQUE, 
    author_id INT, 
    FOREIGN KEY(author_id) REFERENCES authors(author_id) 
    ... 
); 

は、あなたがそれらのすべての違いを指摘してもらえますか?

+0

2つ目のアプローチの利点の1つは、*あなたが**制約に名前を付けることです** - 後でドロップしたい場合は、** name ** **制約の**)。 *あなた自身の制約名を明示的に*指定しないと、FK制約はシステム指定の制約名を取得しますが、これは直感的ではありません。 –

答えて

1

機能的には、両者の間に違いはありません。最初のものはインライン制約と呼ばれ(check制約にも使用できます)。

2つの小さな違いがあります。第1の理由は、constraintキーワードがインラインリファレンスに必要でないため、インラインリファレンスでは制約名を指定しないことが多い(constraintが許可され、という名前を付けることができますが、これは表示する構文ではありません)。

第二の外部キー参照は、1つの列のみを使用できることです。私にとっては、これはほとんど問題ではありません。なぜなら、ほとんどの場合、コンポジットのプライマリキーではなく合成プライマリキーが常に存在するからです。ただし、インライン構文は完全制約の定義よりも強力ではありません。ところで

は、alter tableを使用する第三の方法があります。これは、2番目の方法と似ていますが、テーブルがすでに作成された後に制約を追加することができます。

関連する問題