0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エンティティを知ることでわかること #MySQL

Last updated at Posted at 2025-11-06

エンティティを知ることでわかること

  • 多対多(N:M)
     → 2つのテーブルの間に 中間テーブル を作る必要がある

  • 1対多(1:N)
     → 「多」の側のテーブルは「1」の側のテーブルの主キーを 外部キー として持つ必要がある

また、

  • 「1」の側のテーブルは「多」の側にとっての 親エンティティ

  • 「多」の側のテーブルは「1」の側にとっての 子エンティティ
    となる

なぜ子エンティティが親エンティティの主キーを外部キーとして持つ必要があるのか

MySQL 公式サンプルデータベースの'employee data' の給与テーブル(salaries)と従業員テーブル(employees)を使って考えていきます。

給与明細の一行(以下給与)は一人の従業員のもの
一人の従業員は複数の給与をもつ


従業員と給与は1と多(1:N)


* 従業員テーブルの主キーであるemp_noを
* 給与テーブルの外部キーにする

↓なぜなら

従業員テーブルの一行(一人分の従業員のデータ)には一つの給与しか格納できない


給与テーブルにで、どの従業員がいくらの給与をもらったかを紐づける必要がある

なぜ中間テーブルを作る必要があるのか

MySQL 公式サンプルデータベースの 'employee data' の部署テーブル(departments)と従業員テーブル(employees)を使って考えていきます。

1つの部署には複数の従業員が所属する。
1人の従業員は複数の部署に所属していた履歴がある


部署と従業員の関係は多と多(N:M)である。


* 従業員テーブルの主キーであるemp_noを
* 部署テーブルの外部キーにできない

↓なぜなら

一つの部署レコードにつきemp_noを1つしか格納できない

↓同じく

* 部署テーブルの主キーであるdept_noを
* 従業員テーブルの外部キーにできない

↓なぜなら

一人の従業員レコードにつきdept_noを1つしか格納できない


複数の従業員と複数の部署のデータを互いに紐づけられる
中間テーブルを作る必要がある


従業員の主キーであるemp_noとdept_noをもつ

部署従業員テーブル(dept_emp)が中間テーブルとして作られる


この中間テーブルは
従業員 と 部署 の両方(親エンティティ)にとっての子エンティティ にあたる

結論

多対多 (N:M) の関係が存在する場合、
 → 2つのテーブルの主キーを外部キーとして持つ 中間テーブル を作成する必要がある

1対多 (1:N) の関係の場合、
 → 「多」の側のテーブルが、「1」の側の主キーを 外部キー としてもつ必要がある

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?