SQLServer【Lesson4】FOREIGN KEY(外部キー)の設定

SQL Server

前回のSQLServer【Lesson3】PRIMARY KEY(主キー)の設定に続きまして、
今回の【Lesson4】は、FOREIGN KEY(外部キー)の設定を行います。

このFOREIGN KEY(外部キー)もデータベースを扱う上では欠かせない機能です。
なぜ欠かせないのかは、PRIMARY KEY(主キー)が設定されている事が前提に
なりますが、データの整合性が保てるということです。

このデータの整合性が保たれるとはどういう事なのか、もう少し詳しく見て
から設定していきましょう!

FOREIGN KEY(外部キー)制約によるデータの整合性とは

後に設定していくのですが、【T_車両】を親テーブル、【T_販売管理】が子テーブル
としてFOREIGN KEY(外部キー)制約を結んだ例を見てみましょう。

【T_車両】

車ID車名排気量ボデー形状駆動方式エンジン形式金額
0001カルーラ1800セダンFFガソリン1980000
0002アクーア1500ハッチバックFFハイブリッド1580000
0003パイラックス2800ピックアップ4WDディーゼル3580000

【T_販売管理】

販売管理ID納車日顧客ID車ID従業員ID
00012020/01/20002000010005
00022018/08/08001500020007
00032019/09/12001609800010

【T_販売管理】の[販売管理ID = 0001]と、[販売管理ID = 0002]の行のそれぞれの
[車ID]のデータを見ると、[0001],[0002]となっており、【T_車両】テーブルに
存在する[車ID]データであり、参照できる事が分かります。

しかし、[販売管理ID = 0003]行のデータはエラーになります。

なぜ、エラーが発生しているのかというと、[販売管理ID = 0003]行の
[車ID]の入力データが[0980]になっていて、参照する親テーブルである
【T_車両】の[車ID]に参照できるデータ[0980]が無いためです。

つまり、親テーブルに登録されているデータ以外は登録できないという事です。
これもデータの整合性を保つ為なのです。

では、逆に親テーブルの[販売管理ID = 0001]を削除すると、子テーブルの
[販売管理ID = 0001]はどうなるの?


この場合は、エラー処理にするか、同時に子テーブルのデータも削除するなどの
選択が可能です。

FOREIGN KEY(外部キー)制約を結ぶと、このような確実なデータの整合性を保った
データ管理が可能となり、アプリケーションでの管理も簡単に行えるように
なるのです。

FOREIGN KEY制約の設定

それでは、子テーブルである【T_販売管理】と親テーブルをそれぞれFOREIGN KEY
(外部キー)制約の設定をしていきます。

・【T_販売管理】テーブルを開いてください。

・上段のツールバーに、カーソルを合わせるとリレーションシップという項目が
ありますのでクリック!

新規リレーションシップ追加

外部キーのウィンドウが開いたら、追加をクリック!

まだ仮のリレーションシップ名ですが、【FK_T_販売管理_T_販売管理】が
追加されました。
このリレーションシップのテーブルと列の指定をします。

テーブルと列の指定の行の右に[…]のアイコンがあるのでクリック!

主キーテーブルの選択

【テーブルと列】ウィンドウが開いたら、
まずは、リレーションシップ名を【FK_T_販売管理_T_顧客】に変更しましょう。

リレーションシップ名を見ただけで、【T_販売管理】と【T_顧客】のFOREIGN KEY制約であると
判断できるので、この名付け方にしています。

リレーションシップも実務だとかなり増えてくるので、名称をパッと見て分かるのは
大事ですよ!


親テーブルになる主キーテーブルの【T_顧客】を選択します。

主キー【顧客ID】の選択

プルダウンメニューから、主キーである【顧客ID】を選択します。

FOREIGN KEY制約で指定できる親テーブルのキーは、データが重複しない
PRIMARY KEY(主キー)である事が前提条件です。
これにより、データの整合性を保つことに繋がります。

外部キー【顧客ID】の選択

プルダウンメニューから、外部キーである【顧客ID】を選択して、
【OK】をクリック!

ここで気付く人がいるかもしれませんが、テーブルを作成する段階で、親テーブルの
主キーである【顧客ID】と同じカラム名称にしてあります。
同一名の方が、お互いのキーが何を参照しているのかが分かりやすいですよね。

リレーションシップの追加

下のように、リレーションシップ設定の最初のウィンドウに戻ってきましたね。

【追加】をクリックして、【車ID】と【従業員ID】をそれぞれリレーションシップを
追加設定します。

手順は【FK_T_販売管理_T_顧客】と一緒ですので、振り返りながらやってみましょう!

リレーションシップ【車ID】

【車ID】のリレーションシップの設定内容です。

親テーブルが【T_車両】の主キー【車ID】で、
子テーブルが【T_販売管理】の外部キー【車ID】です。

リレーションシップ【従業員ID】

【従業員ID】のリレーションシップの設定内容です。

親テーブルが【T_従業員】の主キー【従業員ID】で、
子テーブルが【T_販売管理】の外部キー【従業員ID】です。

リレーションシップの保存

【開発されたリレーションシップ】の下枠にリレーションシップが3つ追加されていたら、
【閉じる】をクリックして、保存しましょう。

FOREIGN KEYの設定確認

無事に保存が完了したら、オブジェクトエクスプローラーを更新アイコンもしくは、
F5キーで更新しましょう。

【T_販売管理】の【キー】にFOREIGN KEY制約がちゃんと3つ設定できている事が
確認できますね!

これでFOREIGN KEY(外部キー)制約の設定は完了です。

FOREIGN KEY(外部キー)制約は、データベースを扱う上では必須となる機能なので、
しっかりマスターしておきましょう!

次回は、作成したデータベースにデータをどんどん作成していきます!

SQLServer【Lesson5】テーブルへデータ挿入へつづく。

コメント

タイトルとURLをコピーしました