試験からちょうど1週間。
もうずいぶん昔のような気がするww
06:00 起床
06:10 朝食(あんぱん と クリームパン と コーヒー)
06:30 いろいろ支度開始
07:20 支度完了。ネットをチェック。
07:26 9氏にレス
07:45 出発。途中コンビニで昼食&その他を買う。
昼食:やぶれ饅頭,サンドイッチ(ツナ&たまご),お茶@一
その他携行食料:ミネラルウォーター,ミンティア,チョコレート効果
08:26 会場着。もち教室1番ノリ!
09:15 午前の問題用紙・解答用紙の配布が始まる。
09:30 午前問題開始!試験官の時計は私の時計より1分くらい早いらしい。。。
10:40 午前完了。終了時間30分前に退出。
10:45 一足早く,昼食。トイレも済ませる。
11:15 教室に戻り,メモ等を読み返す。
11:55 午後Iの問題用紙・解答用紙の配布が始まる。
12:10 午後I 開始!時計は調整済。
12:50 問1完了
13:11 問2完了
13:32 問3完了
13:35 解答を控え完了,見直しを開始。
13:40 午後I 終了。。悔いが。。。。
13:45 トイレを済ませる。
13:55 午後II の問題用紙・解答用紙の配布が始まる。
14:10 午後II 開始!問題選択検討
14:15 問1を選択。解き始める。
14:32 設問1完了
15:15 設問2完了
15:32 設問3完了,見直しを開始。
15:55 解答の控えをメモる。
16:05 答案の字が汚い箇所を修正。
16:10 午後II 終了。
16:20 教室を出る。
~酒と肴を買って,自宅で自棄酒w
17:12 H17受験報告スレを立てる
22:42 ワイン片手に経過報告
H17午後I 問1
携帯電話会社の顧客情報を管理するデータベースの基礎理論
集合演算に一見戸惑うが落ち着けば全く問題ないハズ。
設問3(3)で,顧客番号“N0001”を例にしてと指定があり,手がかりと思うのか,単なる記述条件と思うのかで,悩み具合が違うようで。
設問3(1)
使用度数[年月度,電話番号]÷((契約電話番号[顧客番号 = "N0001"]) [電話番号])
顧客番号が"N0001"である電話番号は,001001 と 001002
電話番号{001001,001002}を両方含んでいる年月度を探す。
解答例:設問3(1) a: 200503 b: 200504
設問3(2)
「表のすべての記入欄が埋まるとは限らない」とは書いていないので,すべて埋まるものと考える。
かなりのサービス問題では?
設問3(2)
式① = 使用度数[年月度]
単なる射影
式①
200501
200502
200503
200504
式② = 契約電話番号[顧客番号 = "N0001"]
単なる選択
式②
N0001, 001001
N0001, 001002
式③ = 式① × ((式②)[電話番号])
式②を射影して,式①と直積
式③
200501, 001001
200501, 001002
200502, 001001
200502, 001002
200503, 001001
200503, 001002
200504, 001001
200504, 001002
式④ = (式③) - 使用度数[年月度,電話番号]
式③と射影した使用度数との差集合演算
式③の方にだけあるタプルが残る。
式④
200501, 001002
200502, 001002
式⑤ = 式① - ((式④)[年月度])
式①と射影した式④との差集合演算
式①の方にだけあるタプルが残る。
式⑤
200503
200504
設問3(3)
図5,図6の関係演算で正しく求められない場合を検討
考慮する記述
・解約後,電話番号は別の契約で再利用(表2)
・契約電話番号は,契約中の電話番号を保持
・契約電話番号は,新規契約日に追加され,解約日の翌月の月初日に削除される
解約ばかりに目が行くが。。。視点を変えてみて
顧客番号"N0001"において,年月度200504に,電話番号001003が追加された場合を考えると
年月度200503は2台で複数契約割引,
年月度200504は3台で複数契約割引 と,ならないといけないのだが
200503が図5,図6共に欠落しないだろうか?
ということで
N0001の電話番号が年月度200504に1台増えた場合
解答例:設問3(3)
N0001の電話番号が年月度200504にもう1台増えた場合(30字)
H17午後I 問1
携帯電話会社の顧客情報を管理するデータベースの基礎理論
設問1に比べれば,かなりのサービス設問。
過去問をキチントこなしていれば完答できたハズっす。
顧客使用料(顧客番号,電話番号,氏名,生年月日,住所,基本料,通話料,パケット通信料,オプション料,年月度,計算開始日,計算終了日)
設問2(1)
候補キーの指摘
図2 破線枠内は,不完全。逆を返せば,破線枠外は完全。変な詮索はしない。
解答例:設問2(1) {電話番号,年月度}
変な詮索をすると,計算開始日→年月度,計算終了日→年月度が決まるのではないかと。。。思ってしまう。しかし,図4のインスタンスを見ると,計算開始日と計算終了日は,「年月日」ではなく,「日」だけである。
設問2(2)
正規形の指摘とその根拠。
図を見れば一目瞭然。
{電話番号,年月度}→顧客番号→{氏名,生年月日,住所} という推移関数従属がある。
部分関数従属は存在しない。
解答例:設問2(2) 第2正規形
候補キー{電話番号,年月度}に対し非キー属性が部分関数従属せず,{電話番号,年月度}→顧客番号→氏名という推移関数従属が存在するため。(67文字)
設問2(3)
データ登録時の不都合の記述
解答例:設問2(2) 顧客情報である{氏名,生年月日,住所}を電話番号毎,年月度毎に重複登録しなければならない。(45文字)
設問2(4)
推移関数従属を取り除く。「図1と同様の関係スキーマの形式」とあるので,候補キーは明示しない。
解答例:設問2(4)
顧客(顧客番号,氏名,生年月日,住所)
顧客使用料(電話番号,年月度,顧客番号,基本料,通話料,パケット通信料,オプション料,計算開始日,計算終了日)
ちなみに,候補キー,外部キーを明示すると
顧客(顧客番号,氏名,生年月日,住所)
顧客使用料(電話番号,年月度,顧客番号,基本料,通話料,パケット通信料,オプション料,計算開始日,計算終了日)
となる。
H17午後I 問1
携帯電話会社の顧客情報を管理するデータベースの基礎理論
問題が6ページ半もある難問。
設問1(1)
不適切な関数従属性の指摘する問題。
表1,2の意味と制約を読んで解答なんて,時間的な余裕はない。
限りなく悪問に近い難問と思う。
図2を見ると。。。
① {契約番号,契約日時}→料金プラン種別
② 料金プラン種別→{基本料金使用料,基準無料額}
③ {契約番号,契約日時}→オプション種別
④ オプション種別→オプション使用料
⑤ {契約番号,契約日時}→割引種別
⑥ 割引種別→{割引率,定額料,割引定額料}
⑦ {契約番号,契約日時}→契約種別
⑧ {契約番号,契約日時}→手数料
こいつの中から間違い探し。1個ずつ検証しないといけないから,面倒っす。
とりあえず,推移の真ん中っぽくない末端から検証する。
② 料金プラン種別→{基本料金使用料,基準無料額}
料金プランごとに,基本料金使用料,基準無料額が一意に決まる(表2)。よって,正しい。
④ オプション種別→オプション使用料
オプション種別ごとに,オプション使用料が一意に決まる(表2)。よって,正しい。
⑥ 割引種別→{割引率,定額料,割引定額料}
割引種別ごとに,割引率,定額料及び割引定額料が,空値を含めて一意に決まる(表2)。よって,正しい。
ここまではどうってことない。
{契約番号,契約日時}→○○ が,かなり怪しいのはミエミエである。
⑦ {契約番号,契約日時}→契約種別
新規契約,契約変更及び解約を一意に識別する記号(表2)
では,「新規契約,契約変更及び解約」の単位は?
契約番号を確認する。
新規契約時に付与され,契約変更及び解約の処理には同じ番号が使われる。
つまり,契約番号では,契約種別を一意に特定できない。( × 契約番号→契約種別)
{電話番号,契約番号,契約日時}→契約種別 の可能性を探る。
契約番号→電話番号があるので,電話番号は冗長であるように見えるが,どうだろうか?
契約番号と電話番号の関係を確認。
新規契約時に,一つの電話番号が割り当てられる(表1)。から,契約番号→電話番号が確認できる。
では,契約番号←電話番号は,どうだろうか。・・・図2破線内は,不完全。。。ビミョウw
電話番号は,解約後,数か月以上経過すれば,別の契約で再利用されることがある。(表2)から 契約番号←電話番号は成立しない。よって,契約番号←→電話番号も成立しない。
そしてもうひとつ,契約番号と電話番号は1:1なのか1:Nなのかを確認する必要がある。
新規契約時に,一つの電話番号が割り当てられる(表1)。
契約番号は,契約を一意に識別する番号(表2)
この問題が難問(悪問)所以たる点はここなんだが。。。
かなり微妙な気がするが,1:1と仮定する。(1契約番号で,複数の電話番号はない)・・・※注1
よって,{契約番号,契約日時}→契約種別 は正しい。 (残念!アイテック解答例(4/20時点))
⑧ {契約番号,契約日時}→手数料
新規契約時,契約変更時及び解約時に,実際に発生する事務手数料
必ずしも契約種別から一意に決まるとは限らない。
と,いうことは,契約の候補キーに関数従属するってことで
{契約番号,契約日時}→手数料 だよな。 (残念!アイテック解答例(4/20時点))
① {契約番号,契約日時}→料金プラン種別
現時点の契約に対する料金プラン種別が分かれば良いだけなら,契約番号→料金プラン種別
契約変更による履歴を保存する必要があれば,{契約番号,契約日時}→料金プラン種別
つまりは,料金プラン種別の時系列性を保持する必要があるかどうかってことっす。
保持する理由を探す。
月の途中で新規契約,契約変更及び解約が発生した場合は,日割計算を行う。
顧客使用料のインスタンスはいつ生成されるのかな。。。って記述がない!!
一般的に考えて,利用の都度,契約変更の都度,料金を計算する。なんてことはしないハズで,特定の〆日に1ヶ月分の集計を行うとすると,月内の契約(料金プラン種別)変更時に,日割計算しなければいけないので,時系列性の保持が必要。
また,一つの契約に対して複数の料金プラン種別は選択できない。
よって, {契約番号,契約日時}→料金プラン種別 は,正しい。
③ {契約番号,契約日時}→オプション種別
一つの契約に対して,複数のオプションを設定できる(表2)。
これでは,契約日時をずらさないと複数のオプション種別を保持できない。
表2の同一日に,複数の契約変更及び解約が発生することをあり得る。を満足できない?
(同一日内で,時刻をずらせば良いから満足できる?)
よって,{契約番号,契約日時}→オプション種別 は正しくない。
⑤ {契約番号,契約日時}→割引種別
一つの契約に対して,複数の割引種別を設定できる(表2)。
③と同じ。
これでは,契約日時をずらさないと複数の割引種別を保持できない。
よって,{契約番号,契約日時}→割引種別 は正しくない。
※注1で,契約番号:電話番号=1:Nと判断すると,
アイテック解答例になるのではないでしょうか。。。
解答例:設問1(1) ③,⑤
設問1(2)
まず,契約の候補キーを確認する。
契約(顧客番号,電話番号,契約番号,契約日時,契約種別,手数料,料金プラン種別,オプション種別,割引種別,基準基本使用料,基準無料額)
設問1(1)で確認できている関係は。。。
{契約番号,電話番号}→顧客番号
契約番号→電話番号
料金プラン種別→{基準基本使用料,基準無料額}
{契約番号,契約日時}→{料金プラン種別,契約種別,手数料}
よって,候補キーは
{契約番号,契約日時,オプション種別,割引種別}
で,部分関数従属を指摘すればよいので
解答例:設問1(2)
契約番号→電話番号
{契約番号,契約日時}→料金プラン種別
{契約番号,契約日時}→契約種別
{契約番号,契約日時}→手数料
のうち,2つ書けばよい。
アイテック vs TAC は,TACに軍配か?