2017-06-21 3 views
0

私はC#でプログラムを持ち、SQLサーバーを使用する新しいプロジェクトで作業を開始しました。 データベースはもう少し複雑になり始めていますが、まだ心配することはありませんが、昨日私はStack Overflowのどこかでテーブルを関連付ける新しい方法を見つけました。REFERENCE wordのSQLが異なる動作

表A

CREATE TABLE tableA (
    Id int NOT NULL IDENTITY(1,1), 
    name varchar(50), 
    CONSTRAINT tablea_pk PRIMARY KEY (Id)) 

表B

CREATE TABLE tableB (
    Id int NOT NULL IDENTITY(1,1), 
    name varchar(50), 
    idA int NOT NULL REFERENCES TableA(Id) ON DELETE CASCADE, 
    CONSTRAINT tableB_pk PRIMARY KEY (Id)) 

表C

CREATE TABLE tableC (
    Id int NOT NULL IDENTITY(1,1), 
    name varchar(50), 
    idB int NOT NULL, 
    CONSTRAINT tableC_fk_tableB FOREIGN KEY(idB) 
     REFERENCES tableB(Id) 
     ON DELETE CASCADE) 

Iはcreatiの両方の方法を疑います参照はまったく同じですが、唯一の違いは、テーブルBに参照を作成するときに外部キーの制約名を指定しないため、外部キーの名前がランダムに生成されるためです。

SELECT * FROM sysobjects WHERE name LIKE '%FK%' 

foreign keys

質問は以下のとおりです。両方とも参照するには、まったく同じように動作しますか?制約Foreign Keyを作成した場合と同じですか...または列の定義行からPKを参照していますか?

これはSQLサーバーでのみ行うことができるのか、それともSQLの一般的なものなのかわかりませんが、Googleでその情報を見つけようとしましたが、私には運がありませんでした私は

答えて

1

それは同じだし、あなたも、このようなテーブルBであなたの制約をインラインに名前を付けることができます)を探しています:

CREATE TABLE tableB (
Id int NOT NULL IDENTITY(1,1), 
name varchar(50), 
idA int NOT NULL CONSTRAINT FK_TableB_TableA REFERENCES TableA(Id) ON DELETE CASCADE, 
CONSTRAINT tableB_pk PRIMARY KEY (Id)) 
go 
関連する問題