データベース基本概念

主キー しゅきー

プライマリキー一意制約外部キーリレーショナルデータベースNULL禁止インデックス
主キーについて教えて

簡単に言うとこんな感じ!

主キーは「データの身分証明書番号」みたいなものだよ!マイナンバーみたいに、テーブル内の各行を「これとこれは絶対に別人!」って断言できる、唯一無二の識別番号なんだ。これがないと、同姓同名の人を区別できなくて大混乱になっちゃうってこと!


主キーとは

主キー(プライマリキー) とは、データベースのテーブル内の各行(レコード)を一意に識別するための列(カラム)またはカラムの組み合わせのことです。英語では Primary Key(PK) と呼ばれ、テーブル設計の根幹をなす非常に重要な概念です。

主キーには2つの鉄則があります。① 値が重複しない(一意性)② 値が空(NULL)にならない(非NULL性) です。たとえば社員テーブルなら「社員ID」、商品テーブルなら「商品コード」が主キーになることが多く、この値さえわかれば目的のレコードを必ず1件だけ特定できます。

実務でシステムを発注・選定する際に「テーブル設計書を確認してほしい」と言われたとき、主キーが設定されているかどうかを見るだけで、そのデータベースが適切に設計されているかどうかの第一チェックになります。主キーのないテーブルは「住所録なのに誰が誰かわからない」状態と同じで、データの信頼性が大きく損なわれます。


主キーの3大ルールと役割

ルール内容違反するとどうなる?
一意性(ユニーク)同じ値が2行以上存在してはいけない同じIDの人が2人いて区別できなくなる
非NULL性空(NULL)の値は許可されない「誰かわからない行」が生まれてしまう
不変性できる限り値を変更しない変えると他テーブルとの連携が壊れる

主キーの種類を覚えよう

主キーには大きく2種類あります。

  • 自然キー(ナチュラルキー): 現実世界に存在する値を使う。例:マイナンバー、ISBN(書籍番号)、社員番号など
  • 代理キー(サロゲートキー): システムが自動で採番する番号を使う。例:データベースが自動で振る連番(1, 2, 3…)や UUID

実務では代理キーが推奨されるケースが多いです。自然キーは「社員番号の付け方が変わった」「ISBNの桁数が変わった」など、外部の変更に引きずられてしまうリスクがあるからです。

複合主キーとは?

単一のカラムだけでは一意にできない場合、複数カラムの組み合わせを主キーにすることもできます。これを複合主キー(コンポジットキー) と呼びます。

例:「受講履歴テーブル」では「学生ID + 講座ID」の組み合わせが主キーになる(同じ学生が同じ講座を2回受講するケースがなければ)。


歴史と背景

  • 1970年代: エドガー・F・コッド(IBM)がリレーショナルデータベースの理論を提唱。「候補キー」「主キー」という概念がこの時点で定義された
  • 1974年: IBM研究所でSEQUEL(後のSQL)が開発され、PRIMARY KEY制約が実装される基盤が整う
  • 1980年代: Oracle、DB2などの商用RDBMSが普及し、主キー制約がデータベース設計の標準として定着
  • 1990年代: SQLが国際標準規格(ISO/IEC 9075)として整備され、PRIMARY KEY構文が標準化される
  • 2000年代〜: Webアプリの普及に伴い、自動採番(AUTO_INCREMENT / SERIAL)や UUID が主キーとして広く使われるようになる
  • 現在: NoSQLデータベース(MongoDBなど)でも「_id」フィールドとして主キーに相当する概念が採用されており、データ識別の考え方は不変

主キー・外部キー・インデックスの関係

主キーは単独で存在するだけでなく、外部キー(Foreign Key)インデックス と密接に連携しています。

社員テーブル 🔑 社員ID(主キー) 氏名 部署ID 入社日 給与 外部キー(FK) 部署テーブル 🔑 部署ID(主キー) 部署名 拠点 設立年 外部キーで参照 ⚡ インデックス(自動作成) 主キーには検索高速化のための インデックスが自動で付与される

上の図のように、社員テーブルの「部署ID」(外部キー)は、部署テーブルの「部署ID」(主キー)を参照するというリレーション(関係)を作ります。これがリレーショナルデータベースの真髄であり、主キーがその起点になっています。

また、主キーに設定されたカラムにはデータベースが自動的にインデックス(索引)を作成します。これにより、主キーを使った検索は非常に高速になります。

SQLでの主キー設定例

-- テーブル作成時に主キーを設定する例
CREATE TABLE 社員 (
    社員ID   INT          NOT NULL AUTO_INCREMENT,
    氏名     VARCHAR(50)  NOT NULL,
    部署ID   INT          NOT NULL,
    入社日   DATE,
    PRIMARY KEY (社員ID),          -- 主キーの指定
    FOREIGN KEY (部署ID)           -- 外部キーの指定
        REFERENCES 部署(部署ID)
);

関連する規格・RFC

規格番号内容
ISO/IEC 9075(SQL標準)SQLの国際標準規格。PRIMARY KEY制約の構文・セマンティクスが定義されている
ISO/IEC 10026(分散トランザクション分散DB環境での主キー一意性保証に関連する規格

関連用語

  • 外部キー — 他のテーブルの主キーを参照し、テーブル間の関係を定義するキー
  • インデックス — 検索を高速化するためのデータ構造。主キーには自動作成される
  • 正規化 — データの重複や矛盾をなくすためのテーブル設計プロセス
  • リレーショナルデータベース — 表形式でデータを管理し、主キー・外部キーで関係を表現するDB
  • NULL — 値が存在しないことを示す特殊な状態。主キーには設定不可
  • 一意制約 — 同じ値の重複を禁止するデータベースの制約
  • UUID — 代理キーとしてよく使われる128ビットのユニーク識別子
  • テーブル設計 — データベースの設計工程。主キー選定はその核心的な作業