リレーション
データベース、とりわけリレーショナルデータベースの強みは複数のテーブルに対するデータの取得( SELECT )です。 SELECT 時にテーブル同士の関係を付加することで、複数テーブルにまたがるデータを SQL ひとつで取り出すことが可能です。このテーブル同士の関係をリレーションと呼びます。
以下は代表的なリレーションの例です。
Has one.
テーブルAにあるレコードが、テーブルBのレコードのどれかひとつに対応している状態です。
たとえば社員テーブルのレコード(社員)と年金テーブルのレコード(年金加入年)が年金番号で対応している関係です。
社員テーブル
| emp_id |
name |
division |
pension |
| 1 |
太郎 |
200 |
12345714 |
| 2 |
次郎 |
100 |
13533678 |
| 3 |
三郎 |
200 |
65432345 |
| 4 |
四郎 |
100 |
52345554 |
|
|
社員テーブル
| pension |
joined |
| 12345714 |
2000 |
| 13533678 |
1982 |
| 65432345 |
1978 |
| 52345554 |
2001 |
|
結合後のイメージ
| id |
name |
pension |
joined |
| 1 |
太郎 |
12345714 |
2000 |
| 2 |
次郎 |
13533678 |
1982 |
| 3 |
三郎 |
65432345 |
1978 |
| 4 |
四郎 |
52345554 |
2001 |
Belongs to.
テーブルAにあるレコードが、テーブルBのレコードに属している状態です。
たとえば部署テーブルのレコード(部署)に社員テーブルのレコード(社員)が属している状態です。
部署テーブル
| div_id |
name |
| 100 |
営業部 |
| 200 |
総務部 |
| 300 |
法務部 |
| 400 |
財務部 |
|
|
社員テーブル
| emp_id |
name |
division |
pension |
| 1 |
太郎 |
200 |
12345714 |
| 2 |
次郎 |
100 |
13533678 |
| 3 |
三郎 |
200 |
65432345 |
| 4 |
四郎 |
100 |
52345554 |
|
結合後のイメージ
| div_id |
name |
emp_id |
name |
division |
pension |
| 100 |
営業部 |
2 |
次郎 |
100 |
13533678 |
| 100 |
営業部 |
4 |
四郎 |
100 |
52345554 |
| 200 |
総務部 |
1 |
太郎 |
200 |
12345714 |
| 200 |
総務部 |
3 |
三郎 |
200 |
65432345 |
Has many.
テーブルAのあるレコードがテーブルBのレコードを複数所持している状態です。
たとえば社員テーブルのレコード(社員)が定期券テーブルのレコード(定期券)複数所持している関係です。
社員テーブル
| emp_id |
name |
division |
pension |
| 1 |
太郎 |
200 |
12345714 |
| 2 |
次郎 |
100 |
13533678 |
| 3 |
三郎 |
200 |
65432345 |
| 4 |
四郎 |
100 |
52345554 |
|
|
定期券テーブル
| tk_id |
emp_id |
take |
off |
charge |
| 2400 |
1 |
神保原 |
上野 |
14500 |
| 2401 |
1 |
上野 |
品川 |
4000 |
| 2402 |
4 |
横浜 |
渋谷 |
8900 |
| 2403 |
3 |
中野 |
高円寺 |
4000 |
|
結合後のイメージ
| emp_id |
name |
tk_id |
emp_id |
take |
off |
charge |
| 1 |
太郎 |
2400 |
1 |
神保原 |
上野 |
14500 |
| 1 |
太郎 |
2401 |
1 |
上野 |
品川 |
4000 |
| 4 |
四郎 |
2402 |
4 |
横浜 |
渋谷 |
8900 |
| 3 |
三郎 |
2403 |
3 |
中野 |
高円寺 |
4000 |
Has many and belongs to many.
テーブルAのレコードとテーブルBのレコードが複数個と複数個で結合している状態です。
たとえば社員テーブルのレコード(社員)が会議室テーブル(会議室)を予約した記録などの関係です。
社員テーブル
| emp_id |
name |
division |
pension |
| 1 |
太郎 |
200 |
12345714 |
| 2 |
次郎 |
100 |
13533678 |
| 3 |
三郎 |
200 |
65432345 |
| 4 |
四郎 |
100 |
52345554 |
|
|
会議室テーブル
| mtg_id |
name |
| 10 |
大会議室 |
| 11 |
第1会議室 |
| 12 |
第2会議室 |
| 13 |
ミーティングスペース |
|
会議室利用記録テーブル
| emp_id |
name |
mtg_id |
name |
start |
end |
| 3 |
三郎 |
13 |
ミーティングスペース |
10:00 |
12:00 |
| 3 |
三郎 |
11 |
第1会議室 |
13:00 |
15:00 |
| 1 |
太郎 |
12 |
第2会議室 |
20:00 |
21:00 |
| 4 |
四郎 |
13 |
ミーティングスペース |
9:30 |
10:00 |
« 「テーブル内にあるデータのやりとり」へ | トップへ | 上の階層へ