LoginSignup
27
15

More than 5 years have passed since last update.

超初心者向け・SQLでの親テーブル・子テーブルの考え方

Posted at

前提

Qiita初投稿です!
ここでは
「親テーブルと子テーブル、どっちがどっちか分からん…」
「SQL文書いてて訳分かんなくなった!」
という人向けに、その考え方を超簡単に説明します。
今回はmacOSのterminalを使っています。

DB初心者のため、何か間違いがあればご連絡ください…。

親テーブル・子テーブルとは?

複数のテーブルでデータベースを管理する時、
各テーブルを紐づける「外部キー」を使うことが出来ます。
この時
「親テーブル・子テーブル」にあたるテーブルがどれかによって
「どのテーブルの、どのカラムが外部キーになるのか?」が分かります。

外部キーの役割については調べると沢山出てくるので、ここでは割愛します。
要は外部キーを使って便利な制約を設定できる、という感じです。

一応文字で説明すると、

外部キーを設定して参照する側は子テーブル、参照される側は親テーブル

ということですが、
分かりづらいと思うので(私自身分からなかったので)具体例で見ていきましょう。

具体例

例えば、社員を管理するデータベースにおいて
下の名簿テーブルに「社員ID、氏名、部署ID」の項目があるとします。
この時
「部署IDを、部署テーブルの『部署ID』に関連付けしたいな」
という場合に外部キーを利用します。

名簿テーブル

社員ID 氏名 部署ID
001 佐藤 実 B03
002 田中 隆 A02
003 島田 花子 A02
004 山田 太郎 A01

部署テーブル

部署ID 部署名
A01 開発部
A02 営業部
B03 総務部

この時、

田中さんと島田さんの部署が知りたい!
→名簿テーブルの部署IDだけでは何の部署か分からない…。
→名簿テーブルから外部キー「部署ID」を使って部署テーブルの部署ID[
A02]を参照
→営業部だと分かった!田中さんと島田さんは営業部だ!

という流れが起きます。

上で書いた「参照する・される」でいうと、

  • 「名簿テーブル」が「部署テーブル」を参照している
  • 「部署テーブル」は「名簿テーブル」に参照されている
  • 参照する時、「部署ID」を使っている

ということですね。

以上の点から、

親テーブル:部署テーブル
子テーブル:名簿テーブル
外部キー:部署ID

となります。

※おさらい:
外部キーを設定して参照する側は子テーブル、参照される側は親テーブル

コードで確認

実際にコードで確認してみましょう。

部署テーブル作成

親テーブル「department」
create table department(
 departmentID int,
 departmentName varchar(255),
 primary key(departmentID)
)engine=InnoDB;

名簿テーブル作成

子テーブル「user」
create table user(
 userID int,
 name varchar(255),
 departmentID int,
 primary key(userID),
 foreign key(departmentID)references department(departmentID)
)engine=InnoDB;

この時、子テーブルである名簿テーブルの作成時に「foreign key(外部キー)...」を使って外部キーを設定することができます。

親テーブルで外部キー設定しようとするとエラーが出てうまく出来なかったりするので、
つまずいたら
「親テーブルと子テーブルは合っているか?」
を一度ゆっくり考えてみることをお勧めします。

外部キーについての分かりやすい記事はこちらがオススメです。

27
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
15