データベーススペシャリスト 2023年 午前2 問07
問題文
便名に対して、客室乗務員名の集合及び搭乗者名の集合が決まる関係“フライト”がある。関係“フライト”に関する説明のうち、適切なものはどれか。ここで、便名、客室乗務員名、搭乗者名の組が主キーになっているものとする。

選択肢
ア:関係“フライト”は、更新時異状が発生することはない。
イ:関係“フライト”は、自明でない関数従属が存在する。
ウ:関係“フライト”は、情報無損失分解が可能である。(正解)
エ:関係“フライト”は、ボイス・コッド正規形の条件は満たしていない。
🔒 解説は解答すると表示されます
多値従属と無損失分解【午前2解説】
正解の理由
与えられた関係は「便名」が客室乗務員の集合と搭乗者の集合の両方を決める構造になっており、これは形式的には多値従属(MVD) および が成り立っていることを意味します。多値従属があるときの標準的な定理により、関係Rを と に分解すれば、自然結合によって元の関係を完全に再現できる(情報無損失分解)ため、選択肢ウが正しいです。
なお、関数従属性(FD)が非自明に存在するわけではないため(例えば便名→客室乗務員名は成り立たない)、BCNFの判定はFDに基づくものであり、本問の関係はBCNF の条件を満たす(非自明なFDの決定子がスーパキーでないものが存在しない)ため、選択肢エは誤りです。
解法ステップ
- 主キーを確認する:問題文で「便名、客室乗務員名、搭乗者名の組」が主キーとされている(3属性がキー)。
- 同じ便名に対して複数の客室乗務員名と複数の搭乗者名が並列に存在することを確認する(表の行を観察)。
- 「同一便名で客室乗務員の集合が決まる」「同一便名で搭乗者の集合が決まる」ことから多値従属を認定する:、。
- 多値従属に対する無損失分解の定理を適用し、分解が無損失であることを導く → 選択肢ウを選ぶ。
選択肢別の誤答解説
- ア: 「更新時異状が発生することはない。」
- 誤り。与えられた関係は便名ごとに乗務員と搭乗者の組合せが直積的(クロスプロダクト)になっているため、例えばある乗務員名の変更やある乗客の削除を行うと同一便に関する複数行を更新・削除しなければならず、更新異常や削除・挿入異常が発生しやすい。よって「発生することはない」は不適切。
- イ: 「自明でない関数従属が存在する。」
- 誤り。本問では便名だけで一意に客室乗務員名や搭乗者名が定まる(単一値で決まる)わけではない。表を見ると同一便に複数の客室乗務員・搭乗者が存在するため、便名→客室乗務員名や便名→搭乗者名 のような非自明なFDは成立しない。従ってこの選択肢は誤り。
- ウ: 「情報無損失分解が可能である。」
- 正しい。上記の多値従属に基づき、R を R1(便名, 客室乗務員名) と R2(便名, 搭乗者名) に分解すると、自然結合によって元の R を再構成できる。従って無損失分解が可能。
- エ: 「ボイス・コッド正規形の条件は満たしていない。」
- 誤り。BCNF(ボイス=コッド正規形)は関数従属性に関する条件であり、非自明なFDの決定子が常にスーパキーでなければならない。ここでは非自明なFD自体が存在しない(あるいは存在しても決定子がスーパキーである)ため、BCNF の条件は満たされる。したがって「満たしていない」は誤りである。
よくある誤解
- 「便名が複数の客室乗務員を持つのでFDがある」と誤解する人が多いです。複数値を持つ場合は関数従属性ではなく多値従属性であり、FDとは区別されます。
- 「BCNFにあれば分解は不要」と考える誤り。BCNFはFDに基づく性質で、MVDに関する問題(4NF違反)は別次元です。本問はBCNFを満たしていても4NFには違反している(分解が望ましい)ことがあります。
- 「無損失分解=冗長が完全になくなる」と混同する場合があります。無損失分解は元の情報を失わずに分解できることを意味しますが、分解した各関係の冗長性や実運用上の利便性は別途考える必要があります。
補足コラム
多値従属と無損失分解の定理(簡潔版):
- 関係Rが属性集合を とし、 が成り立つとする(YはXを含まない非自明なセット)。このとき R を と に分解すると、自然結合で元の R を復元できる(無損失)。記述的には
- 証明(概略):任意の行 について、投影により と となるので結合側は含む。逆に結合で得られる任意の は MVD の性質により元の R に存在することが保証される。
正規化の観点では、本問のように非自明な多値従属が存在し、決定子Xがスーパキーでない場合は第4正規形(4NF)に違反するため、X をキーとする分解(本問で示した分解)が推奨されます。
FAQ
Q1: 多値従属と関数従属性の見分け方は?
A1: 同じ決定子Xに対して複数の異なるY値が対応する(集合が決まる)場合は多値従属。ある決定子Xに対して常に単一の値が対応するなら関数従属性(FD)。
Q2: BCNF と 4NF の違いは何か?
A2: BCNF は関数従属性(FD)を扱う正規形。4NF は多値従属(MVD)を扱う正規形で、非自明なMVDが存在して決定子がスーパキーでないと4NF違反となる。
Q3: 無損失分解=安全に分解してよい、の意味か?
A3: 無損失分解は元の関係を自然結合で完全に再現できることを意味し、情報が失われない点で「安全」です。ただし依存性保持や性能・運用上の観点も考慮する必要があります。
Q4: この例で実際に分解するとどんな表になるか?
A4: 典型的には R1(便名, 客室乗務員名) と R2(便名, 搭乗者名) に分解される。これらを自然結合すれば元の組合せを再現できる(無損失)。
関連キーワード: 多値従属性、多値従属、無損失分解、4NF、BCNF、関数従属性、更新異常、正規化

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

