合格基準
8問中7問正解(80%以上)で合格
Q1: 正規化の目的
正規化の主な目的として最も適切なものはどれか?
- A) クエリのパフォーマンスを最大化する
- B) データの冗長性を排除し、更新異常を防ぐ
- C) テーブル数を最小限にする
- D) すべてのデータを1つのテーブルにまとめる
回答と解説
正解: B
正規化の主目的は、データの冗長性(重複)を排除し、挿入異常・更新異常・削除異常を防ぐこと。パフォーマンス向上は副次的効果であり、むしろJOINが増えることでパフォーマンスが下がることもある。
Q2: 第二正規形(2NF)
2NF違反が起きるのはどのような場合か?
- A) 属性に複数の値が格納されている
- B) 複合主キーの一部にのみ依存する非キー属性がある
- C) 非キー属性間に推移的関数従属がある
- D) すべての決定子が候補キーでない
回答と解説
正解: B
2NF違反は「部分関数従属」があるときに起きる。複合主キー(A, B)に対して、非キー属性CがAのみに依存している場合が該当する。Aは1NF違反、Cは3NF違反、DはBCNF違反の説明。
Q3: カーディナリティ
「1人のユーザーは複数の注文を持つが、各注文は必ず1人のユーザーに属する」この関係の多重度は?
- A) 1
- B) 1
- C) N
- D) 0
回答と解説
正解: B
ユーザーから注文への関係は1対多(1
)。1人のユーザーが複数の注文を持ち、各注文は必ず1人のユーザーに属する。Q4: データ型の選択
金額を格納するカラムに最も適切なデータ型はどれか?
- A) FLOAT
- B) DOUBLE
- C) DECIMAL(10, 2)
- D) INTEGER
回答と解説
正解: C
金額には正確な小数計算が必要なため、DECIMAL(固定小数点型)を使う。FLOATやDOUBLEは近似値であり、0.1 + 0.2 が正確に 0.3 にならない浮動小数点誤差が発生する。INTEGERでは小数点以下を扱えない。
Q5: 制約の役割
FOREIGN KEY制約の ON DELETE CASCADE は何を意味するか?
- A) 親レコード削除時に子レコードをNULLに更新する
- B) 親レコード削除時に子レコードも一緒に削除する
- C) 子レコードが存在する限り親レコードを削除できない
- D) 親レコード削除時にデフォルト値を設定する
回答と解説
正解: B
ON DELETE CASCADEは、参照先(親)のレコードが削除されると、参照元(子)のレコードも自動的に削除される。Aは ON DELETE SET NULL、Cは ON DELETE RESTRICT の動作。
Q6: EAVパターン
EAV(Entity-Attribute-Value)パターンの問題点でないものはどれか?
- A) データ型の検証ができない
- B) FOREIGN KEY制約が使えない
- C) テーブル数が増えすぎる
- D) クエリが複雑になる
回答と解説
正解: C
EAVパターンはむしろテーブル数が少なくなる(1テーブルにすべてを格納)のが特徴。問題はデータ型の検証ができない、制約が効かない、クエリが複雑になるなど。
Q7: N
学生と講義のN
?- A) ビューテーブル
- B) 中間テーブル(関連テーブル)
- C) 一時テーブル
- D) マテリアライズドビュー
回答と解説
正解: B
N
(junction table / 関連テーブル / 交差テーブルとも呼ばれる)を使って解消する。中間テーブルは双方のPKを外部キーとして持ち、追加属性(登録日時、成績など)も保持できる。Q8: 非正規化の判断
非正規化が適切なケースはどれか?
- A) テーブル設計が面倒なとき
- B) 読み取り頻度が圧倒的に高いレポートテーブル
- C) すべてのテーブルに対して一律に適用
- D) 正規化の理論を理解していないとき
回答と解説
正解: B
非正規化は、読み取り頻度が圧倒的に高くJOINコストが問題になるケースや、履歴保持(注文時の商品名・価格)、集計値キャッシュなどで意図的に行う。設計が面倒だからという理由や理論を理解せずに行うのは単なる設計不良。
結果
合格(7問以上正解)
おめでとうございます。データ設計の基礎をしっかり理解しています。Step 2「インデックスとクエリ最適化」に進みましょう。
不合格(6問以下)
Step 1 のレッスンを復習してから再挑戦してください。特に以下を重点的に:
- 正規化理論(1NF-3NF-BCNF)の理解
- ER図の多重度の読み方
- データ型と制約の使い分け
推定所要時間: 15分