0
0

More than 1 year has passed since last update.

【SQL】テーブル結合と関係性

Last updated at Posted at 2023-05-17

テーブルの正規化

テーブルを分けて情報の重複をなくす作業

メリット

・データの管理が容易になる
・データ容量の削減になる
 └ パフォーマンスの向上につながる

<正規化前>
▼ usersテーブル(countryカラムを含む)

id name country
1 John Japan
2 Emily USA
3 Alex France

countryの値に変更が生じた場合、該当の列を全て修正しなければならない(修正が必要なデータが何十万件あったら大変)

<正規化後>
▼ usersテーブル(country_idを外部キーとして持たせる)

id name country_id
1 John 1
2 Emily 2
3 Alex 3

▼ countriesテーブル

id name
1 Japan
2 USA
3 France

countryの値に変更が生じた場合、countryテーブルを修正すれば良い

テーブルの結合化

実際にデータを実際にデータを利用して何かをするときは、結合して使用する
▼ 結合されたテーブル

users.id users.name countries.id countries.name
1 John 1 Japan
2 Emily 2 USA
3 Alex 3 France

テーブルの結合とは

テーブル同士をある条件で結合することにより、正規化なしの状態を作り出すこと

主キー(primary key)

一つの行を特定できる列のこと
usersテーブルのidは主キー

外部キー(foreign key)

他のテーブルと関連付けするための列
外部キーは関連付けされた先のテーブルでは主キーになる

リレーションシップの種類

・一対多
・多対多
・一対一

一対多

<departments テーブル>

id name
1 Sales
2 Marketing
3 Finance

<employees テーブル>

id name department_id
1 John 1
2 Emily 1
3 Alex 2
4 Sarah 3

上記の例では、departmentsテーブルとemployeesテーブルが一対多の関係にあります
employeesテーブルのdepartment_idカラムをdepartmentsテーブルのidカラムに関連付けることで、各部署に所属する複数の従業員を管理することができます

多対多

<students テーブル>

id name
1 John
2 Emily
3 Alex

<courses テーブル>

id name
1 Math
2 Science
3 History

<student_courses テーブル(中間テーブル)>

student_id course_id
1 1
1 2
2 1

上記の例では、studentsテーブルとcoursesテーブルが多対多の関係にあります
student_coursesテーブルを介して、学生とコースの関連付けを行います
一人の学生が複数のコースを履修し、同じコースに複数の学生が参加することができます

中間テーブル

中間テーブルは、多対多の関係を管理するためのテーブルです。それは、2つの異なるテーブルの間の関連を表現し、それらのテーブルのレコードを関連付けるために使用されます。中間テーブルは、多対多の関係において、関連付けを仲介し、必要なデータを正確に保存する役割を果たします。

一対一

id name
1 John
2 Emily
3 Alex

id user_id bio
1 1 I'm a software engineer.
2 2 I enjoy photography.
3 3 I love cooking.

上記の例では、usersテーブルとprofilesテーブルが一対一の関係にあります
usersテーブルのidカラムとprofilesテーブルのuser_idカラムを結び付けることで、各ユーザーのプロフィール情報を取得できます
一人のユーザーに対して、一つのプロフィール情報が対応しています
※一対一のテーブルは余り見かけない。。

参考資料

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