SQL Serverを使用して、1対多の関係をどのように作成しますか?
これは、テーブル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
:テーブルの名前、この場合はbid
:表Bの列の名前これは、古典的な注文の例の簡単な例です。各Customerは複数のOrderを持つことができ、各Orderは複数のOrderLines。
外部キー 列を追加して、リレーションを作成します。各注文レコードには、顧客のIDを指すCustomerIDが含まれています。同様に、各OrderLineにはOrderID値があります。これは、データベースダイアグラムの外観です。
この図には、実際の 外部キー制約 があります。これらはオプションですが、データの整合性を保証します。また、データベースの構造を、それを使用する誰にとっても明確にします。
テーブルの作成方法はご存知だと思います。次に、それらの間の関係を定義する必要があります。もちろん、T-SQLで制約を定義することもできます(複数の人が投稿したように)が、デザイナーを使用して簡単に追加することもできます。 SQL Management Studioを使用して、Orderテーブルを右クリックし、Design( 2005年の編集と呼ばれる場合があります)。次に、ウィンドウ内の任意の場所を右クリックして、Relationshipsを選択します。
別のダイアログが表示され、右側にグリッドビューが表示されます。最初の行の1つは「Tables and Columns Specification」です。その行をクリックし、右側に表示される小さな[...]ボタンをもう一度クリックします。このダイアログが表示されます:
Orderテーブルはすでに右側で選択されているはずです。左側のドロップダウンで顧客テーブルを選択します。次に、左側のグリッドで、ID
列を選択します。右側のグリッドで、CustomerID
列を選択します。ダイアログを閉じて、次へ。 Ctrl + Sを押して保存します。
この制約があることにより、付随する顧客レコードなしでは注文レコードが存在できなくなります。
このようなデータベースを効率的に照会するには、 JOINで読み上げる を使用します。
これは私が通常行う方法です(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リンクです。
教師と生徒など、2種類のエンティティについて話している場合、それぞれに2つのテーブルを作成し、3つ目のテーブルを作成して関係を保存します。この3番目のテーブルには、teacherIDとStudentIdの2つの列があります。これが探しているものでない場合は、質問を詳しく説明してください。
SSMSを使用していない場合の構文は次のとおりです。
ALTER TABLE <table_name>
ADD <constraint_name> FOREIGN KEY
(<column_name1> ,
<column_name2> )
REFERENCES <table_name>
(<column_name1> ,
<column_name2>)