重要なポイント

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

解説

今までのテーブル作成の場合だと、学生マスタ(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 auto_increment,
 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)
);

演習

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

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