重要なポイント
解説
今までのテーブル作成の場合だと、学生マスタ(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)
);
演習
実際にデータを登録してみてください。
- 学生マスタ(students_mst)に学科マスタ(departments_mst)の学科ID(department_id)が「結びつく」データを登録すること。
- 学生マスタ(students_mst)に学科マスタ(departments_mst)の学科ID(department_id)が「結びつかない」データを登録すること。