応用情報22年秋 午前 問29

【中分類】
データベース−2. データベース設計−(2)データベースの設計

【問題を解く前に】

 候補キーというのは、レコードがあったとき、ある項目(列)ないしは、項目を2個、3個と複数集めたもの(列の組)の値を1つ取り出すと、それは「どのレコード」と特定できてしまう項目ないしは、項目のあつまり。

    • -

具体的にいうと、以下の商品レコードがあったとする。

商品番号 商品名   価格(円)
1    りんご   50
2    みかん   30
3    かき    50
4    バナナ   30

このとき、価格をとってきても、 価格=50円というのは、
りんごと、かき2つあるので、決まらない。
よって、候補キーではない。

      • -

商品名は、りんごといったら、

  1    りんご   50

で1つの行にきまる。たぶん、だぶらない。もし、たぶったら、
たとえば、

  5    りんご   100

とあって、お店で、「りんごくださーい!」って言ったら、
50円とられるか、100円とられるか、わからない(>_<!)
こりゃ困る。

 なので、たぶん、だぶらない。
 1レコードに商品名は値1個。

 よって、候補キー

    • -

 でも、さっきの話。

  5    りんご   100

 とあって、お店で、「りんごくださーい!」って言ったら、
 50円とられるか、100円とられるか、わからないから困ると書きました。

 じつは、こまらない。「50円のりんごくださーい」って
言えばいい。このとき、(商品名、価格)の組で言っている
ことになる。

 つまり、(商品名、価格)の組も候補キー

        • -

 つぎに、商品番号。
 これは、商品番号がきまったら、必ず商品が決まる・・・ように作っている。
 じゃなきゃ、番号振る意味がない。

 だから、1レコードに商品番号は値1個。

 よって、候補キー

        • -

 今見てきたように、商品番号、商品名、(商品名、価格)などが、候補キーとなる。この中から、主キーを決める。

 一般にこのときには、商品番号だけど、商品名の可能性もある。
 システム上、商品名を直接入力することがあまりにも多い場合、
 もし、商品番号を主キーとして、他データベースと結合するときのキー
 (=外部キー、参照キー)にしていると、
 JOINするときは、かならず、商品名から商品番号を求めるために、
 商品テーブルをJOINしないといけなくなる。このJOINを減らすために、
商品名をあえてキーにすることもある(他の理由もあるけど、それを聞いている
設問でないので省略)

【解き方】

 で、それはいいんです。問題は、この設問、答えが2つあるように、読める人、いませんか?

まず、(エ)は、だれも疑いません。定義ですから・・・

 問題は、(ア)。もし、候補キーの中から主キーを選ぶんなら、主キーはnullにできないから(ア)も正しいということになってしまいます。

 実は、Wikipediaで候補キーを見てもらうと判るけど、候補キーにNULLを認めるか、認めないかは両方の立場があります。
 試験出題者の主張は、NULLを認める立場なのでしょう(じゃないと、正解が2つになり、問題が成立しない)。このような、立場によって、正解が2つになるような問題の場合、たいてい、あいまいさを防ぐために、だれしも認めるような項目が正解(今回はエ)として入っています。

 その正解を選びましょう。


【答え】
(エ)

【解き終わって】

 データベース関係には、正規化の手法でも、まったく違う2つの方法があって、(じつはどちらでもよい=手法は定義されていない)のですが、どちらも「私が正解!」ということがあります。

 試験的には、正解が2つになるような問題の場合、たいてい、あいまいさを防ぐために、だれしも認めるような項目が正解として入っていますので、そちらを選びます。


 現場的には、上司ないしは、お客さんのいうほうに合わせてください。

 したがって、同じ会社で、同じ時期に、同じ用語を、(上司や顧客が無知なために)まったく違うもや、違う手法を指して言うことがあります。それは、あわせたほうが、身のためです。宗教論争ですから・・・新興宗教の信者に、「あなたの宗教は間違っている」というのと同じで、めちゃくちゃ大変です。

 特に、(第一正規形の手法など)複数の方法があるのに、知らない人は、「知らないの、バカじゃない?」と罵倒すると思うので、「はーい!教えてくれてありがとう」みたいな形で、バカにされてください。それも、お仕事です。バカにされてなんぼの世界かもしれません。SEの仕事なんて・・・


 でも、それを見ている後輩などは、混乱しますので、その辺の悲哀を説明してあげてください。
(ただし、間違った手法で、炎上する場合があります。そういうときは、「さらっ」と自分の手法でこっそりやってしまいますけどね!正規化手法、2つあるうち、一方のほうをやると、確実に炎上します)

【受験テクニック】

 試験的には、正解が2つになるような問題の場合、たいてい、あいまいさを防ぐために、だれしも認めるような項目が正解として入っている・・・と思います。そちらを選んでください。