データベースでは、いくつかのタイプの関係が定義できます。 従業員と部署との間のいろいろな関係について考えてみましょう。 従業員が 1 つの部署だけでしか働かない場合、 この関係は従業員にとって単一値 です。 一方、1 つの部署には多数の従業員が含まれますので、 この関係は部署にとって複数値 になります。 従業員 (単数値) と部署 (複数値) との間の関係は、 1 対多 の関係になります。 このセクションでは、次のタイプの関係について説明します。
1 対多および多対 1 の関係ごとに、それぞれ表を定義するには、次のようにします。
次の例では、1 番目と 2 番目の関係の「多」の側が「従業員」なので、従業員の表「EMPLOYEE」を定義します。
エンティティー | 関係 | エンティティー |
---|---|---|
従業員が (Employees) | 割り当てられる (are assigned to) | 部門に (departments) |
従業員が (Employees) | 働く (work at) | 仕事を (jobs) |
部門が (Departments) | 報告する (report to) | (管理) 部門に ((administrative) departments) |
3 番目の関係の場合、「部署」が「多」の側なので、部署の表「DEPARTMENT」を定義します。
次の表は、 これらの関係が表でどのように表されるかを示しています。
EMPLOYEE 表:
EMPNO | WORKDEPT | JOB |
---|---|---|
000010 | A00 | President |
000020 | B01 | Manager |
000120 | A00 | Clerk |
000130 | C01 | Analyst |
000030 | C01 | Manager |
000140 | C01 | Analyst |
000170 | D11 | Designer |
DEPARTMENT 表:
DEPTNO | ADMRDEPT |
---|---|
C01 | A00 |
D01 | A00 |
D11 | D01 |
多対多の関係は、両方向に複数値の関係です。 1 人の従業員が複数のプロジェクトで働き、 1 つのプロジェクトに複数の従業員が加わっている場合がそれに当たります。 「Dolores Quintana の仕事はなにか?」および「プロジェクト IF1000 で だれが働いているか?」 という質問には、両方とも複数の答えがあります。 多対多の関係は、エンティティー (「従業員」と「プロジェクト」) ごとに 1 つの列を割り当てた表にすることができます。次の例をご覧ください。
多対多の関係 (1 人の従業員が複数のプロジェクトで働き、 1 つのプロジェクトで複数の従業員が働く) がどのように表されるかを、次の表に示します。
従業員活動 (EMP_ACT) 表:
EMPNO | PROJNO |
---|---|
000030 | IF1000 |
000030 | IF2000 |
000130 | IF1000 |
000140 | IF2000 |
000250 | AD3112 |
1 対 1 の関係は、両方向に単一値の関係です。 1 人のマネージャーは 1 つの部署を管理し、 1 つの部署には 1 人のマネージャーしかいません。 「C01 部の管理者はだれか?」および「Sally Kwan はどの部署を管理して いるか?」という質問は、両方とも答えは 1 つです。 この関係は、DEPARTMENT 表と EMPLOYEE 表のどちらにでも割り当てることができます。 すべての部署にマネージャーがいますが、すべての従業員がマネージャーで はないため、マネージャーは DEPARTMENT に追加する方が論理的です。次の 例をご覧ください。
次に、1 対 1 関係がどのように表で表されるかを示します。
DEPARTMENT 表:
DEPTNO | MGRNO |
---|---|
A00 | 000010 |
B01 | 000020 |
D11 | 000060 |