関係データベースの主キーに求められる条件を確かめる
ITパスポート試験 令和5年度 問78 / データベース › データベース設計
過去問にチャレンジ
関係データベースの主キーの設定に関する記述として,適切なものだけを全て挙げたものはどれか。 a 値が他のレコードと重複するものは主キーとして使用できない。 b インデックスとの重複設定はできない。 c 主キーの値は数値でなければならない。 d 複数のフィールドを使って主キーを構成できる。
- ア
a,c
- イ
a,d
- ウ
b,c
- エ
b,d
会話形式の解説
講師今回は関係データベースの主キーがテーマです。四つの記述が主キーの定義に合っているかを、一つずつ確かめていきましょう。基準になるのは「主キーは各レコードを一意に識別するための項目」という定義です。
受験者一意に識別するということは、同じ値が二つあると困るのですよね。だとすると、重複する値は主キーにできないという記述は正しそうです。
講師そのとおりです。値が重複していると、どのレコードを指しているのか区別できません。なので、その記述は適切です。主キーには、重複しないこと(一意性)に加えて、値が空のNULLを取らないこと(非NULL性)も求められます。
受験者次の、複数のフィールドで主キーを作れるという記述が気になります。主キーは一つの項目だと思っていたので、私は誤りだと考えました。
講師そこは迷いやすいところです。一つの項目だけでは値が重複しても、複数の項目を組み合わせて一意になれば主キーにできます。これを複合主キーといいます。ですから、この記述も適切です。
受験者組合せで一意になればよいのですね。では、主キーの値は数値でなければならないという記述はどうでしょうか。番号を振ることが多いので、正しい気もします。
講師番号がよく使われるのは確かですが、定義に求められているのは一意性と非NULL性だけです。データ型の制限はありません。文字列などでも、条件を満たせば主キーにできます。この記述は、定義にない制限を足しているので不適切です。
受験者残りはインデックスとの重複設定ができないという記述です。インデックスという言葉自体があいまいで、主キーとの違いがよく分かっていません。
講師インデックスは、検索を速くするための仕組みです。レコードを識別するための主キーとは役割が違うので、同じ項目に両方を設定できます。この記述も、定義にない制限を足しているので不適切です。
受験者整理すると、適切なのは重複不可の記述と複合主キーの記述で、データ型とインデックスの記述は誤りです。答えはイですね。
講師正解です。アは数値限定の記述が、エはインデックスの記述が誤りなので外れます。ウはどちらの記述も誤りです。
講師補足すると、多くのDBMS(データベース管理システム)では、一意性を保証するために主キーにインデックスが自動で作られます。主キーに関する記述で迷ったら、「一意性」と「非NULL性」という定義から導けるかどうかで判断しましょう。
まとめ
関係データベースの主キーは、表の各レコードを一意に識別するための項目です。値が重複しないこと(一意性)と、NULLを取らないこと(非NULL性)が求められます。複数の項目を組み合わせた複合主キーも、組合せで一意になれば使えます。一方、主キーのデータ型は数値に限られず、検索を速くする仕組みであるインデックスも主キーと同じ項目に設定できます。したがって、適切な記述は「重複する値は主キーにできない」と「複数フィールドで主キーを構成できる」の二つで、正解はイです。
解答・解説
正解はイです
この問題のテーマ
関係データベースの主キーが満たすべき条件を問う問題です。一意性、複合主キー、データ型、インデックスとの関係について、正しく理解しているかを確かめます。
解き方の考え方
まず、主キーは各レコードを一意に識別するための項目で、値の重複もNULLも許されない、という定義を確認します。この定義に合うかどうかで、a〜dを一つずつ判定します。aは一意性の条件そのものなので適切です。dの複合主キーも、組合せで一意になればよいので適切です。bとcは、主キーの定義にない制限を足しているので不適切です。インデックスは検索を速くするための仕組みで、主キーと同時に設定できます。また、主キーのデータ型は数値に限られません。
選択肢ごとの解説
- ×ア a,c「a,c」の組合せです。重複する値は主キーにできないというaは適切です。一方、主キーの値は数値でなければならないというcは誤りです。文字列などの数値以外の型でも、一意性を満たせば主キーにできます。
- ○イ a,d「a,d」の組合せです。aは、値が重複する項目ではレコードを一意に識別できないため主キーにできない、という正しい記述です。dは、複数フィールドを組み合わせた複合主キーの説明で、これも適切です。適切なものはaとdだけなので、イが正解です。
- ×ウ b,c「b,c」の組合せで、どちらも不適切です。bについては、主キーを設定した項目にインデックスを設定することもできます。cについては、主キーのデータ型は数値に限られません。
- ×エ b,d「b,d」の組合せです。複合主キーを構成できるというdは適切です。しかし、インデックスとの重複設定ができないというbは誤りです。インデックスは検索を速くする仕組みで、主キーとは役割が違うので併存できます。
補足
bとcが誤りなのは、主キーの定義にない制限を勝手に足しているからです。これに対して、aの「使用できない」は、一意性という主キー本来の条件からそのまま導ける正しい記述です。迷ったときは、表現の強さではなく、主キーの定義から導けるかどうかで判断しましょう。なお、多くのDBMSでは、一意性を保証するために主キーにインデックスが自動で作成されます。
POINT
- 主キーは、表の各レコードを一意に識別するための項目です。
- 主キーには、値が重複しないこと(一意性)と、NULLを取らないこと(非NULL性)が求められます。
- 複数の項目を組み合わせて主キーにしたものを、複合主キーといいます。
- 主キーのデータ型は数値に限られず、文字列などでも構いません。
- インデックスは検索を速くする仕組みで、主キーと同じ項目に設定できます。
