データベースの基礎

受注表(受注番号, 商品番号, 数量, 顧客番号, 顧客名)の主キーは{受注番号, 商品番号}で、関数従属は {受注番号, 商品番号} → 数量、受注番号 → 顧客番号、顧客番号 → 顧客名 である。この表を第3正規形まで正規化した結果として正しいものはどれか。

  1. A受注明細(受注番号, 商品番号, 数量, 顧客番号)、顧客(顧客番号, 顧客名)
  2. B受注明細(受注番号, 商品番号, 数量)、受注(受注番号, 顧客番号)、顧客(顧客番号, 顧客名)
  3. C受注明細(受注番号, 商品番号, 数量)、受注(受注番号, 顧客番号, 顧客名)
答えと解説を見る

正解:B. 受注明細(受注番号, 商品番号, 数量)、受注(受注番号, 顧客番号)、顧客(顧客番号, 顧客名)

第2正規形は、第1正規形で、しかも主キーの一部だけに従属する列(部分関数従属)がない状態です。受注番号 → 顧客番号 は、主キーの一部である受注番号だけで顧客番号が決まる部分関数従属なので、元の表は第1正規形ですが第2正規形ではありません。受注番号で決まる列を受注(受注番号, 顧客番号, 顧客名)として分けると、第2正規形になります。第3正規形は、第2正規形で、しかも主キー以外の列を経由して決まる列(推移的関数従属)がない状態です。受注表には 受注番号 → 顧客番号 → 顧客名 という推移的関数従属が残っているので、顧客(顧客番号, 顧客名)をさらに分けます。こうして、受注明細(受注番号, 商品番号, 数量)、受注(受注番号, 顧客番号)、顧客(顧客番号, 顧客名)の3つの表が第3正規形になります。分けた表は、受注番号や顧客番号で結合すれば元の表に戻せます。

  • A. 受注明細に、受注番号だけで決まる顧客番号が残っており、部分関数従属があるので、第2正規形にもなっていません。
  • B. 正しい。部分関数従属と推移的関数従属をどちらも取り除いた第3正規形です。
  • C. 第2正規形ですが、受注表に 受注番号 → 顧客番号 → 顧客名 の推移的関数従属が残っています。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

  1. 社員表(社員番号, 氏名, 部署コード, 部署名)の主キーは社員番号で、どの列も1つの値だけを持つ。関数従属は 社員番号 → 氏名、社員番号 → 部署コード、部署コード → 部署名 である。この表の正規形として正しいものはどれか。
  2. 読み出しが大部分を占める集計用のデータベースで、正規化した表をあえて1つにまとめ、同じデータを重複して持たせる設計(非正規化)を行うことがある。この設計の長所と短所の組み合わせとして正しいものはどれか。
  3. E-R図で、学生と科目の間に「1人の学生は複数の科目を履修し、1つの科目は複数の学生が履修する」という多対多の関係がある。この関係を関係データベースの表で実現する方法として、適切なものはどれか。
  4. 口座表で、トランザクションを開始し、口座Aの残高から300を引く UPDATE と、口座Bの残高に300を足す UPDATE を実行した。その後、COMMITの代わりに ROLLBACK を実行した。口座表はどうなるか。
  5. トランザクションが持つべきACID特性のうち、「口座Aから引き落として口座Bに入金する振替の処理が、途中で障害が起きても、両方とも行われるか、まったく行われないかのどちらかになる」という性質はどれか。