前回の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 |
0001 | 2020/01/20 | 0020 | 0001 | 0005 |
0002 | 2018/08/08 | 0015 | 0002 | 0007 |
0003 | 2019/09/12 | 0016 | 0980 | 0010 |
【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】テーブルへデータ挿入へつづく。
コメント