データベースの基礎
E-R図で、学生と科目の間に「1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する」という多対多の関係がある。この関係を関係データベースの表で実現する方法として、適切なものはどれか。
- A学生番号と科目番号を外部キーとして持つ履修表を新たに作る
- B学生表に科目番号の列を1つ追加する
- C科目表に学生番号の列を1つ追加する
答えと解説を見る
正解:A. 学生番号と科目番号を外部キーとして持つ履修表を新たに作る
E-R図は、データベースで管理する対象(エンティティ)と、エンティティどうしの関係(リレーションシップ)を図で表したもので、関係には1対1、1対多、多対多といった多重度(カーディナリティ)があります。1対多の関係は、多の側の表に、1の側の主キーを外部キーとして持たせれば表せます(例えば、社員表に部署コードを持たせる)。しかし多対多の関係は、どちらかの表に列を1つ追加するだけでは、1人の学生につき1つの科目(または1つの科目につき1人の学生)しか記録できません。そこで、学生番号と科目番号を外部キーとして持つ履修表(連関エンティティ)を間に置き、学生と履修、科目と履修という2つの1対多の関係に分解します。履修表の主キーは、学生番号と科目番号の組にするのが一般的です。
- A. 正しい。連関エンティティの表を置き、2つの1対多の関係に分解します。
- B. 学生ごとに科目番号を1つしか記録できず、複数の科目の履修を表せません。
- C. 科目ごとに学生番号を1つしか記録できず、複数の学生の履修を表せません。