データベースの基礎

社員表(社員番号, 氏名, 部署コード, 部署名)の主キーは社員番号で、どの列も1つの値だけを持つ。関数従属は 社員番号 → 氏名、社員番号 → 部署コード、部署コード → 部署名 である。この表の正規形として正しいものはどれか。

  1. A第2正規形だが、第3正規形ではない
  2. B第1正規形だが、第2正規形ではない
  3. C第3正規形である
答えと解説を見る

正解:A. 第2正規形だが、第3正規形ではない

どの列も繰り返しのない1つの値を持つので、第1正規形です。主キーが社員番号の1列だけなので、主キーの一部だけに従属する部分関数従属は起こりえず、第2正規形でもあります。しかし、部署名は 社員番号 → 部署コード → 部署名 のように、主キーではない部署コードを経由して決まる推移的関数従属なので、第3正規形ではありません。このままでは、同じ部署の社員の行ごとに部署名が繰り返し記録され、部署名を変えるときに何行も書き換える必要があります。部署表(部署コード, 部署名)を分け、社員表には部署コードだけを残すと、第3正規形になります。このとき社員表の部署コードは、部署表を参照する外部キーになります。

  • A. 正しい。部署コード → 部署名 の推移的関数従属があるので、第3正規形ではありません。
  • B. 主キーが1列なので部分関数従属はなく、第2正規形の条件は満たしています。
  • C. 部署名が、主キーでない部署コードを経由して決まる推移的関数従属があるので、第3正規形ではありません。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

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