マナビングITパスポート

関係データベースの主キーに求められる条件を確かめる

ITパスポート試験 令和5年度 問78 / データベース › データベース設計

過去問にチャレンジ

令和5年度 問78

関係データベースの主キーの設定に関する記述として,適切なものだけを全て挙げたものはどれか。 a 値が他のレコードと重複するものは主キーとして使用できない。 b インデックスとの重複設定はできない。 c 主キーの値は数値でなければならない。 d 複数のフィールドを使って主キーを構成できる。

  1. ア

    a,c

  2. イ

    a,d

  3. ウ

    b,c

  4. エ

    b,d

会話形式の解説

講師講師
今回は関係データベースの主キーがテーマです。四つの記述が主キーの定義に合っているかを、一つずつ確かめていきましょう。基準になるのは「主キーは各レコードを一意に識別するための項目」という定義です。
受験者受験者
一意に識別するということは、同じ値が二つあると困るのですよね。だとすると、重複する値は主キーにできないという記述は正しそうです。
講師講師
そのとおりです。値が重複していると、どのレコードを指しているのか区別できません。なので、その記述は適切です。主キーには、重複しないこと(一意性)に加えて、値が空のNULLを取らないこと(非NULL性)も求められます。
受験者受験者
次の、複数のフィールドで主キーを作れるという記述が気になります。主キーは一つの項目だと思っていたので、私は誤りだと考えました。
講師講師
そこは迷いやすいところです。一つの項目だけでは値が重複しても、複数の項目を組み合わせて一意になれば主キーにできます。これを複合主キーといいます。ですから、この記述も適切です。
受験者受験者
組合せで一意になればよいのですね。では、主キーの値は数値でなければならないという記述はどうでしょうか。番号を振ることが多いので、正しい気もします。
講師講師
番号がよく使われるのは確かですが、定義に求められているのは一意性と非NULL性だけです。データ型の制限はありません。文字列などでも、条件を満たせば主キーにできます。この記述は、定義にない制限を足しているので不適切です。
受験者受験者
残りはインデックスとの重複設定ができないという記述です。インデックスという言葉自体があいまいで、主キーとの違いがよく分かっていません。
講師講師
インデックスは、検索を速くするための仕組みです。レコードを識別するための主キーとは役割が違うので、同じ項目に両方を設定できます。この記述も、定義にない制限を足しているので不適切です。
受験者受験者
整理すると、適切なのは重複不可の記述と複合主キーの記述で、データ型とインデックスの記述は誤りです。答えはイですね。
講師講師
正解です。アは数値限定の記述が、エはインデックスの記述が誤りなので外れます。ウはどちらの記述も誤りです。
講師講師
補足すると、多くのDBMS(データベース管理システム)では、一意性を保証するために主キーにインデックスが自動で作られます。主キーに関する記述で迷ったら、「一意性」と「非NULL性」という定義から導けるかどうかで判断しましょう。

まとめ

関係データベースの主キーは、表の各レコードを一意に識別するための項目です。値が重複しないこと(一意性)と、NULLを取らないこと(非NULL性)が求められます。複数の項目を組み合わせた複合主キーも、組合せで一意になれば使えます。一方、主キーのデータ型は数値に限られず、検索を速くする仕組みであるインデックスも主キーと同じ項目に設定できます。したがって、適切な記述は「重複する値は主キーにできない」と「複数フィールドで主キーを構成できる」の二つで、正解はイです。

解答・解説

正解はイです

この問題のテーマ

関係データベースの主キーが満たすべき条件を問う問題です。一意性、複合主キー、データ型、インデックスとの関係について、正しく理解しているかを確かめます。

解き方の考え方

まず、主キーは各レコードを一意に識別するための項目で、値の重複もNULLも許されない、という定義を確認します。この定義に合うかどうかで、a〜dを一つずつ判定します。aは一意性の条件そのものなので適切です。dの複合主キーも、組合せで一意になればよいので適切です。bとcは、主キーの定義にない制限を足しているので不適切です。インデックスは検索を速くするための仕組みで、主キーと同時に設定できます。また、主キーのデータ型は数値に限られません。

選択肢ごとの解説

  1. ×ア  a,c
    「a,c」の組合せです。重複する値は主キーにできないというaは適切です。一方、主キーの値は数値でなければならないというcは誤りです。文字列などの数値以外の型でも、一意性を満たせば主キーにできます。
  2. ○イ  a,d
    「a,d」の組合せです。aは、値が重複する項目ではレコードを一意に識別できないため主キーにできない、という正しい記述です。dは、複数フィールドを組み合わせた複合主キーの説明で、これも適切です。適切なものはaとdだけなので、イが正解です。
  3. ×ウ  b,c
    「b,c」の組合せで、どちらも不適切です。bについては、主キーを設定した項目にインデックスを設定することもできます。cについては、主キーのデータ型は数値に限られません。
  4. ×エ  b,d
    「b,d」の組合せです。複合主キーを構成できるというdは適切です。しかし、インデックスとの重複設定ができないというbは誤りです。インデックスは検索を速くする仕組みで、主キーとは役割が違うので併存できます。

補足

bとcが誤りなのは、主キーの定義にない制限を勝手に足しているからです。これに対して、aの「使用できない」は、一意性という主キー本来の条件からそのまま導ける正しい記述です。迷ったときは、表現の強さではなく、主キーの定義から導けるかどうかで判断しましょう。なお、多くのDBMSでは、一意性を保証するために主キーにインデックスが自動で作成されます。

POINT

  • 主キーは、表の各レコードを一意に識別するための項目です。
  • 主キーには、値が重複しないこと(一意性)と、NULLを取らないこと(非NULL性)が求められます。
  • 複数の項目を組み合わせて主キーにしたものを、複合主キーといいます。
  • 主キーのデータ型は数値に限られず、文字列などでも構いません。
  • インデックスは検索を速くする仕組みで、主キーと同じ項目に設定できます。

※出典:令和5年度 ITパスポート試験 問78