主キー(プライマリキー)とは
主キー(プライマリキー)とは、関係データベース(RDB)のテーブルにおいて、登録されているたくさんの行(レコード)の中から、特定の「1行を絶対に特定(識別)できる」ための特別な列(項目)のことです。主キーには重要なルールがあり、『同じテーブル内に同じ値が重複して存在してはならない(一意性)』『データが空(NULL)であってはならない』という特徴を持ちます。主キーを決めることで、データが混ざり合うのを防ぎます。
具体例
学校の「学生テーブル」を考えてみましょう。生徒の『名前』は同姓同名がいるかもしれないので主キーにはできません。『電話番号』も家族で共有している場合があり重複する可能性があります。そこで、入学時に一人ひとりに割り当てる『学籍番号』という絶対に重複しない独自の番号を割り当てて主キーに設定します。これにより、学籍番号さえ指定すれば、日本全国の生徒から特定の1名を誤ることなく呼び出すことができます。
もう少し詳しく
主キー(Primary Key)は、データベースにおけるデータの品質や整合性を保つための「整合性制約(実体整合性制約)」の根幹をなす仕組みです。主キーを設定するためには、以下の2つの技術的ルール(制約)を完全に満たす必要があります。
1. 一意性制約(ユニーク制約):テーブル内のすべての行において、主キー列の値が重複してはなりません。これにより、同一のデータが重複して登録されるのを物理的に防止します。
2. 非ヌル制約(NOT NULL制約):主キー列の値が「空(NULL)」であってはなりません。行を識別するための値が存在しない状態は許されないためです。
また、主キーには1つの列だけで構成される単一のキーだけでなく、複数の列を組み合わせて1つの主キーとして扱う「複合主キー(複合キー)」もあります。例えば、「注文明細テーブル」において、「注文ID」だけでは複数の明細があるため行を特定できません。そこで「注文ID」と「枝番(明細番号)」の2つの列を組み合わせて主キーとすることで、1つの明細行を特定できるようにします。
主キーに関連するデータベース設計の用語として、以下のキーの分類も重要です。
・スーパーキー:行を一意に特定できる列の組み合わせすべて(余分な列を含んでいてもよい)。
・候補キー(Candidate Key):スーパーキーのうち、余分な列を含まない(一意性を満たす最小限の構成である)もの。この候補キーの中から、設計者が代表として選んだ1つが「主キー」になります。選ばれなかった候補キーは「代替キー」と呼びます。
・代理キー(サロゲートキー):業務データ自体には存在しない、システムが自動的に割り振る連番(ID)などを用いた主キー。
・自然キー(ナチュラルキー):業務データに元から含まれる値(学籍番号、商品コードなど)を用いた主キー。
試験でのポイント
IT試験においては、主キーの持つ特徴(一意性、非NULL)を答える問題や、候補キーの概念と主キーの選定方法についての問題が出題されます。
試験対策としての重要ポイントは以下の通りです。
・一意性と非NULLのセット:「重複がなく、空値(NULL)であってはならない」という条件が主キーの定義であることを暗記しましょう。他の列もユニーク(一意)にできますが、NULLを許可しない代表キーが主キーとなります。
・候補キーと主キーの関係:「候補キーの中から1つを選択して主キーとする」というルールを理解しているかが問われます。
・複合主キーの扱い:複合主キーの場合、構成する「すべての列の値の組み合わせ」が一意であればよく、一部の列だけであれば値が重複していても制約違反にはならない点を理解しておきましょう。例えば、(A-1)と(A-2)は共存可能です。
関連する用語
主キーとペアになってテーブル間のリレーションを結ぶ「外部キー」は最も重要な関連用語です。また、主キーの持つ制約ルールである「一意性制約(ユニーク制約)」や「実体整合性制約(NOT NULL)」、主キーの前提となる「候補キー」や、主キーをキーとして検索を高速化するために自動で作られることが多い「インデックス(索引)」も重要な関連ワードです。