重要なポイント

レコード追加する際に他のテーブルとの関係性をチェック

解説

今までのテーブル作成の場合だと、学生マスタ(students_mst)に学科マスタ(departments_mst)に登録されていない学科ID(department_id)を登録することができました。結合することができないデータを許可している状態です。


 

下記の図を見てみると、学生マスタ(students_mst)にある学科ID(department_id)の〈2〉が、学科マスタ(departments_mst)に登録されておらず結びつかなくても、登録されている状態です。もし、この状態を作りたくない場合には『外部キー制約』を設定します。

構文

外部キーの設定

下記のテーブルレイアウトの通り、学科ID(department_id)のNULL項目のところに、「FK」と記述します。
※この表記は、企業によって表記がことなります。

今回の関係を整理してみます。

  • 学生マスタ(students_mst)は、参照テーブル(子テーブル:参照する)
  • 学科マスタ(departments_mst)は、参照テーブル(親テーブル:参照される)

create table [テーブル名](
 [カラム名1] [型] [null/not null],
 [カラム名2] [型] [null/not null],
 [カラム名3] [型] [null/not null],
 
 primary key (
  [カラム名1]
 ),
 foreign key([参照元カラム名]) references [参照先テーブル名]([参照先カラム名])
);

<例題>

  • テーブルレイアウトを基にテーブルを作成すること。(テーブル名は、「departments_mst_fk」「students_mst_fk」とする。)
create table departments_mst_fk (
 department_id int not null,
 department_name varchar(255) not null,
 insert_at datetime not null,
 update_at datetime not null,
 delete_at datetime null,

 primary key(
  department_id
 )
);

create table students_mst_fk (
 student_id int not null,
 student_name varchar(255) not null,
 student_name_kana varchar(255) null,
 student_number varchar(20) null,
 department_id int null,
 gender char(1) not null,
 age int null,
 test_score int null,
 insert_at datetime not null,
 update_at datetime not null,
 delete_at datetime null,

 primary key(
  student_id
 ),
 foreign key(department_id) references departments_mst_fk(department_id)
);

演習

実際にデータを登録してみてください。

  1. 学生マスタ(students_mst)に学科マスタ(departments_mst)の科ID(department_id)が「結びつく」データを登録すること。
  2. 学生マスタ(students_mst)に学科マスタ(departments_mst)の科ID(department_id)が「結びつかない」データを登録すること。