- ベストアンサー
データベーススペシャリスト試験(正規化)
- データベーススペシャリスト試験、H22春期[午後1][問1]のデータベースの基礎理論に関して質問させてください。
- 正規化について、設問2で下記のような問題が出題されています。過去問題集などで問題の解答解説を読んだところ、疑問がでました。
- データベーススペシャリスト試験での正規化の疑問について、解答がわかりません。アドバイスをいただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
第3正規化を突き詰めるから、、、ということにつきるかと 疑問1 構成(大問ID , 中問ID , 小問ID) 小問ID は、中問ID に紐付いており(従属関係)、中問IDがあれば、小問は決定するので、構成table から小問の情報を分割可能 よって、大中(大問ID , 中問ID)と中小(中問ID , 小問ID) に分解すると、3つのIDを含む「構成」tableは不要となります 。 別の表現では、(大問 , 中問)の1ペアごとに複数の 小問の行が生成されるのは、大問の情報が無駄に複製されていると云うことである。この無駄な複製をなくすために、tableを分割するのが第3正規化 構成と同じ表は、以下のように join で作成可能 select lm.大問ID, lm.中問ID , ms.小問ID from `大中` as lm left join `中小` as ms on lm.中問ID = ms.中問ID 実際の運用では、join に無駄な時間が掛かると考えるなら、第2正規形のままとしたりもします。 疑問2 答案tableでも、上記の join 文を view にしておけば、大問ID から、中問や小問の問題文情報は全て得られるので、受講者IDと大問ID が紐付けば、そこにさらに中問IDや小問IDを含ませる必要はない。 あと、複数回解答の区別のために解答日時が連動キーとして用いられているので解りにくのだと思うが、 {受講者ID,大問ID,解答日時} の関数従属性として与えられる採点tableの各行に、採点id を振れば、解答tableにも日時カラムは不要になるだろう ということで、同一受講者の同一大問IDへの複数回の解答を全部管理するなら、私ならこっちにするけど。元のtableにない解答idや採点idカラムを作ることは、この課題の目的ではないのだろう。というか連動キーそのままで理解出来るかを問うているのか。 回数{解答id, 受講者ID,大問ID,解答回数} 採点{採点id, 解答id,解答日時,解答時間,評点} 解答{採点id,小問ID,解答,得点}
お礼
具体的に回答頂きありがとうございました。 内容を参考に考え直したところ、納得することができました。 ありがとうございました。