H11午後I 問3(ITEC 2005予想問題集 午後I 問1-5)
ITEC 2005予想問題集の午後I データベース設計の基礎理論の中で一番難しい問題かな。
設問1(1)
図2 関係“フライト”が,{乗員,日付}→機種を満たしているか素直に判断する。
解答は淡白に「満たす」だけでも良いと思う。(私だったら,少し丁寧に「条件を満たす」とか,かなり丁寧に「図1の関数従属性の条件を満たす」とか書くかも。)
設問1(2)
ここで躓く人は多いのではないだろうか。
フライトの関数従属性は,
図1より,{乗員,日付}→機種
問題文:機種は,~,便名の日付ごとに決まっている。より,{便名,日付}→機種
以上の条件で推移的関数従属もないので
合併律({A,B}→Dでかつ{A,C}→Dの場合,{A,B,C}→Dが成り立つ)により
{便名,日付,乗員}→機種 となる。
※候補キー内の列記の順番は意味を持っていないが,採点者を気遣いスキーマの左から順番に書こう。
ここでややこしいのは,合併律を知らずに,問題文に書かれていない関数従属性を見つけてしまうことである。
図2の中の関数従属性を見極め,候補キーを探していると。。。
{乗員,日付}→便名
という関係が導ける。(これは,乗員は1日1便しか搭乗しないという業務上の制約を生む)
{乗員,日付}→{便名,日付}→機種
と,推移関数従属し,候補キーは{乗員,日付}となる。(※{便名,日付}は候補キーではない)
(※ {乗員,日付}→機種 の関係があるので,これを推移的関数従属と呼ぶのかよく分かりません)
どちらにせよ,関数従属性が多く出てきて判断に迷ったら,冷静に,関数従属性の図を描いてみよう。
設問1(3)
候補キーを{便名,日付,乗員}とした場合
部分関数従属:{便名,日付}→機種,{乗員,日付}→機種 が,あるため第1正規形
候補キーを{乗員,日付}とした場合
推移的関数従属があるため,第3正規形ではない。
候補キーに対して非キー属性は完全関数従属しているため,第2正規形?
{乗員,日付}→便名,{乗員,日付}→機種
設問2
設問1で候補キーを{便名,日付,乗員}と解答したものとする。
設問2(1),(2) 定番ですね
設問2(3)
{便名,日付,乗員}→機種
{乗員,日付}→機種
{便名,日付}→機種 ・・・ 図9と同じ
ここで,安易に
搭乗乗務(乗員,日付,機種) としないように。
設問3(1)
アイテック解答例に,まだ納得できていない。
NULL値を含むタプルを排除し,重複タプルも排除すればよさそうな気もするが・・・
設問3(2)
冷静に埋めれば問題なし
設問3(3)
射影だけで書く。勝手に選択しないこと。
選択演算については,NULLの扱いが不明。射影の時点で排除しているので
改めて,「乗員 IS NOT NULL」の条件が必要かどうか疑問だ。
そういやこれネタとしてはH16午後1問1と同じ航空ネタだよね。そろそろネタが一巡するころかw
でなんでH16午後1問1やらないの(´・ω・)?
>>2 :9
時間があれば,近いうちに書くつもりです。 問題を解くタイミングと記事を書く時間があるタイミングがなかなか一致しないんだよね。
多値従属性については,誤解していた点もあるんで書きたいんだけどなー
>設問2(3)
搭乗(乗員,日付,機種) としないように。
⇒こうしてしまったのですが、(スキーマ名は搭乗が既にあるので別にしましたが)なぜこれでは駄目なのでしょうか?
無損失分解で、関数従属性も失われていないと思います。
{便名、乗員、日付}だと{便名,日付}→機種が失われているように思えるのですが。。。
よろしくお願いします。
>>4 :おみおみ さん
>スキーマ名は搭乗が既にあるので別にしましたが
「乗務」のタイプミスでした m(_ _)m
{乗員,日付}→{便名,日付}→機種 は,見つけてはいけない関数従属性です。
これにハマると,設問2が解けません。
設問2と,したのは,{乗員,日付}→{便名,日付}→機種を条件にしてしまうと設問2が解けないからです(^^ゞ
設問1で候補キーを{便名,日付,乗員}と解答したものとする。
どうやら,インスタンスから関数従属性を捻出するのはNGのようですね。
と,いうことで
{乗員,日付}→機種
{便名,日付,乗員}→機種
を,満たすためには。。。
⇒H11午後I 問3 vol.2 にて。