データベースの基礎

読み出しが大部分を占める集計用のデータベースで、正規化した表をあえて1つにまとめ、同じデータを重複して持たせる設計(非正規化)を行うことがある。この設計の長所と短所の組み合わせとして正しいものはどれか。

  1. A重複がなくなって記憶容量が減る一方、結合が増えて読み出しが遅くなる
  2. B読み出しも更新も速くなり、データの整合性も自動的に保たれる
  3. C結合が減って読み出しが速くなる一方、重複したデータの整合性を保つための更新の手間が増える
答えと解説を見る

正解:C. 結合が減って読み出しが速くなる一方、重複したデータの整合性を保つための更新の手間が増える

正規化すると、データの重複がなくなって更新時異常を防げる一方、検索のたびに複数の表の結合が必要になります。読み出しの性能が重要な場面では、よく一緒に使う列を1つの表にまとめたり、集計した結果を列として持たせたりして、あえて正規化を崩すことがあります。これを非正規化(デノーマライゼーション)と呼びます。結合が減るので読み出しは速くなりますが、同じデータが何か所にも記録されるので、変更のたびにすべての箇所を正しく更新しなければならず、更新の手間と、内容が食い違うリスクが増えます。記憶容量も一般に増えます。そのため、更新の多い業務処理用のデータベースは正規化を基本にし、非正規化は、効果と代償を比べたうえで、必要な箇所に限って行います。

  • A. これは逆です。非正規化ではデータの重複が増え、結合が減ります。
  • B. 重複したデータの整合性は自動では保たれず、更新の処理で保つ必要があります。
  • C. 正しい。読み出しは速くなりますが、重複したデータをそろえて更新する手間と、食い違いのリスクが増えます。
この分野を解く 分野ページへ

関連する計算ツール

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

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

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

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