リレーションシップとは
データベースで1つのテーブルに全てのデータを格納して管理する代わりに、例えば商品だけを管理する商品マスターテーブルや、社員だけを管理する社員マスターテーブルなどを作成し、必要な項目毎にテーブルを分離して管理します。
例えば顧客情報を管理するテーブルを例に考えて見ます。
顧客ID | 顧客名 | 営業担当 |
---|---|---|
1 | トヨタ自動車 | 鈴木 |
2 | 日本電気 | 佐藤 |
3 | 富士通 | 鈴木 |
4 | 日産自動車 | 高橋 |
5 | ソフトバンク | 佐藤 |
このテーブルであれば今のところは問題はありません。ただ、このテーブルを使って営業担当の部署まで管理しようとすると次のようなテーブルになってしまいます。
顧客ID | 顧客名 | 営業担当 | 部署 |
---|---|---|---|
1 | トヨタ自動車 | 鈴木 | 第一営業部 |
2 | 日本電気 | 佐藤 | 第二営業部 |
3 | 富士通 | 鈴木 | 第一営業部 |
4 | 日産自動車 | 高橋 | 第一営業部 |
5 | ソフトバンク | 佐藤 | 第二営業部 |
営業担当の部祖に関する情報は一度定義してあればいいはずですけど、まとめて1つのテーブルで管理しようとすると同じ情報が複数テーブル内に存在することになります。例えば鈴木さんの部署を変更する場合、全てのテーブル内に記述された鈴木さんの部署を変更しなければなりません。
このような場合は営業担当者用のテーブルを別に作成し管理することで効率よくデータを管理できます。
営業担当ID | 担当者名 | 部署 |
---|---|---|
101 | 鈴木 | 第一営業部 |
102 | 佐藤 | 第二営業部 |
201 | 高橋 | 第一営業部 |
このように別のテーブルで管理しておければ鈴木さんの部署を変更する場合でも1箇所の変更で済みます。
そして顧客情報テーブルには担当者名や部署を格納するのではなく、営業担当者テーブルの営業担当IDを格納するようにします。
顧客ID | 顧客名 | 営業担当ID |
---|---|---|
1 | トヨタ自動車 | 101 |
2 | 日本電気 | 102 |
3 | 富士通 | 101 |
4 | 日産自動車 | 201 |
5 | ソフトバンク | 102 |
そして顧客情報テーブルの営業担当IDは、営業担当者テーブルの営業担当IDが格納されていることを明確に定義しておきます。このように複数のテーブルに分割された情報がどのように関連しあっているのかを設定するのがリレーションシップの定義です。
リレーショナルシップの定義を利用することで、膨大な情報を複数のテーブルを使って分割して管理し、そして自由に結合して必要な情報を関連付けて取り出すことが可能になります。
それでは次のページからAccessにおいてリレーションシップを設定する方法を確認していきましょう。
( Written by Tatsuo Ikura )