データベースの基礎

E-R図で、学生と科目の間に「1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する」という多対多の関係がある。この関係を関係データベースの表で実現する方法として、適切なものはどれか。

  1. A学生番号と科目番号を外部キーとして持つ履修表を新たに作る
  2. B学生表に科目番号の列を1つ追加する
  3. C科目表に学生番号の列を1つ追加する
答えと解説を見る

正解:A. 学生番号と科目番号を外部キーとして持つ履修表を新たに作る

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

  • A. 正しい。連関エンティティの表を置き、2つの1対多の関係に分解します。
  • B. 学生ごとに科目番号を1つしか記録できず、複数の科目の履修を表せません。
  • C. 科目ごとに学生番号を1つしか記録できず、複数の学生の履修を表せません。
この分野を解く 分野ページへ

関連する計算ツール

データベースの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データベースの基礎のほかの問題

  1. 口座表で、トランザクションを開始し、口座Aの残高から300を引く UPDATE と、口座Bの残高に300を足す UPDATE を実行した。その後、COMMITの代わりに ROLLBACK を実行した。口座表はどうなるか。
  2. トランザクションが持つべきACID特性のうち、「口座Aから引き落として口座Bに入金する振替の処理が、途中で障害が起きても、両方とも行われるか、まったく行われないかのどちらかになる」という性質はどれか。
  3. 在庫表のある商品の在庫数は10である。トランザクションT1は在庫数を読み出して3を引いた値を書き込み、T2は在庫数を読み出して5を引いた値を書き込む。ロックをかけずに、T1の読み出し、T2の読み出し、T1の書き込み、T2の書き込みの順に実行されたとき、最終的な在庫数はいくつになるか。
  4. トランザクションを同時に実行したときに起きる問題のうち、ダーティリードの説明として正しいものはどれか。
  5. トランザクションT1が SELECT COUNT(*) FROM 注文 WHERE 金額 >= 1000 を実行したところ8件だった。その直後に、T2が金額2000の注文の行をINSERTしてコミットした。T1が同じSELECT文をもう一度実行すると9件になった。この現象はどれか。