web-dev-qa-db-ja.com

SQL Serverを使用して1対多の関係を作成する

SQL Serverを使用して、1対多の関係をどのように作成しますか?

49
Tim
  1. 2つのテーブル(例AとB)を、それぞれの主キーで定義します
  2. 表Bの主キーに基づいて外部キー関係を持つように表Aの列を定義します

これは、テーブルAがテーブルBの単一レコードに関連する1つ以上のレコードを持つことができることを意味します。

すでにテーブルを配置している場合は、ALTER TABLEステートメントを使用して外部キー制約を作成します。

ALTER TABLE A ADD CONSTRAINT fk_b FOREIGN KEY (b_id) references b(id) 
  • fk_b:外部キー制約の名前。データベースに対して一意である必要があります
  • b_id:外部キー関係を作成しているテーブルAの列の名前
  • b:テーブルの名前、この場合はb
  • id:表Bの列の名前
78
OMG Ponies

これは、古典的な注文の例の簡単な例です。各Customerは複数のOrderを持つことができ、各Orderは複数のOrderLines。

外部キー 列を追加して、リレーションを作成します。各注文レコードには、顧客のIDを指すCustomerIDが含まれています。同様に、各OrderLineにはOrderID値があります。これは、データベースダイアグラムの外観です。

enter image description here

この図には、実際の 外部キー制約 があります。これらはオプションですが、データの整合性を保証します。また、データベースの構造を、それを使用する誰にとっても明確にします。

テーブルの作成方法はご存知だと思います。次に、それらの間の関係を定義する必要があります。もちろん、T-SQLで制約を定義することもできます(複数の人が投稿したように)が、デザイナーを使用して簡単に追加することもできます。 SQL Management Studioを使用して、Orderテーブルを右クリックし、Design( 2005年の編集と呼ばれる場合があります)。次に、ウィンドウ内の任意の場所を右クリックして、Relationshipsを選択します。

別のダイアログが表示され、右側にグリッドビューが表示されます。最初の行の1つは「Tables and Columns Specification」です。その行をクリックし、右側に表示される小さな[...]ボタンをもう一度クリックします。このダイアログが表示されます:

Foreign key constraint

Orderテーブルはすでに右側で選択されているはずです。左側のドロップダウンで顧客テーブルを選択します。次に、左側のグリッドで、ID列を選択します。右側のグリッドで、CustomerID列を選択します。ダイアログを閉じて、次へ。 Ctrl + Sを押して保存します。

この制約があることにより、付随する顧客レコードなしでは注文レコードが存在できなくなります。

このようなデータベースを効率的に照会するには、 JOINで読み上げる を使用します。

59
Thorarin

これは私が通常行う方法です(SQLサーバー)。

Create Table Master (
MasterID int identity(1,1) primary key,
Stuff varchar(10)
)
GO
Create Table Detail (
DetailID int identity(1,1) primary key,
MasterID int references Master, --use 'references'
Stuff varchar(10))
GO
Insert into Master values('value')
--(1 row(s) affected)
GO
Insert into Detail values (1, 'Value1') -- Works
--(1 row(s) affected)
insert into Detail values (2, 'Value2') -- Fails
--Msg 547, Level 16, State 0, Line 2
--The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Detail__MasterID__0C70CFB4". 
--The conflict occurred in database "Play", table "dbo.Master", column 'MasterID'.
--The statement has been terminated.

ご覧のとおり、詳細への2番目の挿入は外部キーのために失敗します。以下は、テーブル作成中または作成後にFKを定義するためのさまざまな構文を示す優れたWebリンクです。

http://www.1keydata.com/sql/sql-foreign-key.html

3
KSimons

教師と生徒など、2種類のエンティティについて話している場合、それぞれに2つのテーブルを作成し、3つ目のテーブルを作成して関係を保存します。この3番目のテーブルには、teacherIDとStudentIdの2つの列があります。これが探しているものでない場合は、質問を詳しく説明してください。

1
DevByDefault

SSMSを使用していない場合の構文は次のとおりです。

ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY 
(<column_name1> ,
<column_name2> )
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)

http://infogoal.com/sql/sql-add-foreignkey.htm

1
andrewWinn