ホーム > データベーススペシャリスト試験 > 2013年
データベーススペシャリスト試験 2013年 午前2 問02
関数従属に関する記述のうち、適切なものはどれか。ここで、A、B、Cはある関係の属性の集合とする。
ア:BがAに関数従属し、CがAに関数従属すれば、CはBに関数従属する。
イ:BがAの部分集合であり、CがAに関数従属すれば、CはBに関数従属する。
ウ:BがAの部分集合であれば、AはBに関数従属する。
エ:BとCの和集合がAに関数従属すれば、BとCはそれぞれがAに関数従属する。(正解)
解説
関数従属に関する解説
関数従属(functional dependency)は、関係データベース理論における重要な概念です。関数従属は、ある属性集合 (A) が決まると、別の属性集合 (B) が一意に決定される関係を表します。
関数従属の基本
- 記述: ( A \to B ) は、「属性集合 (A) が属性集合 (B) を関数従属させる」、つまり「(A) の値が同じならば、対応する (B) の値も必ず同じである」という意味。
- 意味的には「(A) が決まれば (B) が一意に決まる」。
選択肢の検討
ここでは、属性集合 (A、B、C) について関数従属の性質を考えます。
ア: 「BがAに関数従属し、CがAに関数従属すれば、CはBに関数従属する」
- 関数従属は推移的に成立するとは限りません。
- 例えば、自動車の**車体番号(A)**が「車の色(B)」と「エンジン種類(C)」を決定しても、「車の色(B)」だけから「エンジン種類(C)」が決まるとは限りません。
- よって、誤り。
イ: 「BがAの部分集合であり、CがAに関数従属すれば、CはBに関数従属する」
- 属性集合が小さくなると決定力は落ちるため、(A)が(C)を決めても(B\subseteq A)に対しては一般に関数従属は成立しません。
- したがって、誤り。
ウ: 「BがAの部分集合であれば、AはBに関数従属する」
- トリビアル関数従属の一例で、任意の属性集合はその部分集合に関数従属する(自明な性質)。
- 例外なく成立。
- ところが、問題の「適切なものはどれか」が正解とされているのは「エ」なので一見正しそうに見えますが、選択肢の記述によっては文脈で違う可能性があります。
- しかし一般論としてはこの記述は正しい。
エ: 「BとCの和集合がAに関数従属すれば、BとCはそれぞれがAに関数従属する」
- これは分解ルール(分割則)と呼ばれる関数従属の基本性質です。
- 具体的には、関数従属は部分集合にも成立するため、確かにこの関係は成立する。
- よって、正しい。
正解のまとめ
-
関数従属の基本性質の一つに**分解則(decomposition rule)**があります:
-
これが選択肢「エ」に該当する例です。
-
他の選択肢は誤りや不十分な説明のため、「エ」が適切な記述といえます。
まとめ
以上より、**正解は「エ」**であり、分解則という関数従属の基本的な性質を利用した記述になります。