最後のソフ開、午後2

さて、落ちてしまったソフ開の午後2問題振返りますよ〜

問題(PDF)
解答(PDF)

今回はデータベースの問題。ネットオークションが題材とやたらにとっつきやすそうな感じでした。
設問1
ユースケース図に関する問題。全問正解。ユースケース図について午後問題で出題されるのはかなり珍しいと思う。

設問2
ユースケースシナリオの問題。全問正解。これも今までに見たことのないタイプの問題だ。

設問3
クラス図の問題。1問間違え。
落札の関係では、「出品物を落札する人がいない」という状況があるんだから、多重度は1じゃなくて、0..1になるんだよなあ...

設問4
ステートチャート図の問題。2問間違え。引っかかった〜
入札者なしのステートから入札者ありのステートに行くとき、入札者ありのステートを繰り返す時って、「希望落札価格以下」じゃなくて「希望落札価格未満」じゃないか! 希望落札価格以下ってことは希望落札価格に達していることになってしまう... このミスはけっこう響いたかなぁ

設問5
インデックスの問題。間違えた。
今はオラクル講座受けたんで、若干インデックスに対する理解は深まったけど、当時は「インデックス? 検索速くするやつでしょ?」ぐらいの理解しかなかった。
間違えた内容は、両方の問題で付与すべきインデックスに「出品物(状態)」を書いてしまったこと。出品物の状態なんて4つしかないんだから、インデックス付与する意味ないじゃねぇか。インデックスは広範な値をとるものに付与しないとね...
ちなみにこの問題、TACの解答(PDF)だと僕の回答が正解になっています。確かに「出品物(状態)」にインデックスを付与したら絶対ダメか、とは言えないけど、あまり不用意にインデックスをつけるとデータの挿入・更新のスピードが落ちるから避けたほうがいい。よって、IPAのほうが正しい。解答発表するの遅いけど。

設問6
データベース整合性の問題。間違えた。
トランザクションは入札者が有効な会員であるかどうかを判断してからすぐ始めないとまずいのか。おそらく、この時点でトランザクションを開始してロックをかけないと、他者との競合という問題が生じるからかな。もし競合になった場合、入札価格の確認とコミットのタイミングによっては、現入札価格より安い価格で入札できる、という事態が想定される。これを防ぐためには有効な会員であることがわかった段階でトランザクション開始して、排他性を保証する必要がある。
あと、出品物UPDATEと入札INSERTのどっちを先にやるか、だけど、これは出品物UPDATEを先にするべきでしょう。画面に表示するからね。またTACとIPAで解答割れているけど。

設問7
自動応札機能の問題。(1)全問正解、(2)間違え。
(1)は問題文を読めていれば正解できる問題。
(2)はまたTACとIPAで解答割れている。僕はTACのように回答しました。
IPAの回答例のように、入札上限価格だけで大丈夫なのか、誰が自動応札を登録しているかって情報いらないのか、と思ったんですが、よく考えたら入札上限価格だけでいいんですね。自動応札は常に一つしか登録されなくて、さらに自動応札が有効なのって「自動応札登録者=現入札者」というときだけだから、誰が自動応札登録しているかっていうのは、入札上限価格がNULLじゃなければ現入札者ってわかる*1。問題の指定が「最小限」なんでIPAのほうが正解。だけど、こんな風にテーブル設定したら、実際に使うには分かりにくいなあ。

まとめ
設問6と設問7の(2)は難問か。あと、設問5はインデックスの知識が足りなかった自分には仕方ない問題。だからこそ、設問3と設問4でのミスが悔やまれる。このミスがなければぎりぎり600越えぐらいで合格できていたかも。来年の応用情報技術者ではこうならないようにしないと。
それから、まだまだ自分はデータベースとかトランザクションに対する理解が足りないなあと認識できました。まあ、乗り越えなければならない課題があるのは悪いことじゃないです。♪カンタンに 行かないから 生きてゆける

*1:NULLの場合は自動応札者が登録されていない