重要なポイント
解説
今までのテーブル作成の場合だと、学生マスタ(student_mst)に学科マスタ(gakka_mst)に登録されていない学科NO(gakka_no)を登録することができました。結合することができないデータを許可している状態です。
下記の図を見てみると、学生マスタ(student_mst)にある学科NO(gakka_no)の〈2〉が、学科マスタ(gakka_mst)に登録されておらず結びつかなくても、登録されている状態です。もし、この状態を作りたくない場合には『外部キー制約』を設定します。
構文
外部キーの設定
下記のテーブルレイアウトの通り、学科NO(gakka_no)のNULL項目のところに、「FK」と記述します。
※この表記は、企業によって表記がことなります。
今回の関係を整理してみます。
- 学生マスタ(student_mst)は、参照元テーブル(子テーブル:参照する)
- 学科マスタ(gakka_mst)は、参照先テーブル(親テーブル:参照される)
create table [テーブル名](
[カラム名1] [型] [null/not null],
[カラム名2] [型] [null/not null],
[カラム名3] [型] [null/not null],
primary key (
[カラム名1]
),
foreign key([参照元カラム名]) references [参照先テーブル名]([参照先カラム名])
);
<例題>
- テーブルレイアウトを基にテーブルを作成すること。(テーブル名は、「gakka_mst_fk」「student_mst_fk」とする。)
create table gakka_mst_fk (
gakka_no int not null,
gakka_kj varchar(255) not null,
delete_ku char(1) not null,
insert_at datetime not null,
update_at datetime not null,
primary key(
gakka_no
)
);
create table student_mst_fk (
student_no int not null,
student_kj varchar(255) not null,
student_kn varchar(255) null,
student_cd varchar(20) null,
gakka_no int null,
seibetu_ku char(1) not null,
age_nb int null,
test_su int null,
delete_ku char(1) not null,
insert_at datetime not null,
update_at datetime not null,
primary key(
student_no
),
foreign key(gakka_no) references gakka_mst_fk(gakka_no)
);
演習
実際にデータを登録してみてください。
- 学生マスタ(student_mst)に学科マスタ(gakka_mst)の学科NO(gakka_no)が「結びつく」データを登録すること。
- 学生マスタ(student_mst)に学科マスタ(gakka_mst)の学科NO(gakka_no)が「結びつかない」データを登録すること。