2005年04月24日

[ テクニカルエンジニア(データベース)/H17 ]

H17午後I 問1設問1

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に軍配か?

Posted by g@kko at 2005/04/24 14:52 | 個別記事表示 | コメントを見る (3) |
この記事をLicWikiに埋め込む:
コメント
2 :g@kko:05/04/24 14:56:11 [RES]

久々に長文書くと疲れる。。。w


3 :9:05/04/24 17:38:22 [RES]

ようやく解説キタ━━━━━━o(゚∀゚)o━━━━━━!!
っておいおい、客観ばかりで肝心のガッコの解答とかの主観が全然ないやん(;´・∀・)つ
そんなのつまらんヽ(`Д´)ノ
ガッコの解答、その正答、TAC配点による配当、結果的に問1は何点だったとかそこまでキボンo(´・∀・`)o


4 :natsuki:05/04/25 01:39:19 [RES]

僕は、部分関数従属を答える問で

オプション種別→オプション使用料
割引種別→割引率

の2つを挙げてしまいました。
"オプション種別"と"割引種別"は候補キーの一部ですが、よく見ると「契約」の関係の中には、"オプション使用料"と"割引率"の属性はありませんでした。

くぁっっっっ!!
凡ミスしてしまった!!!(涙)