複合主キー【composite primary key】複合キー/連結キー
概要

データベースのテーブルは、各行を一意に識別できるように「主キー」(primary key)を設定する必要がある。通常はIDや管理番号のように単一の列で事足りるが、1つの列だけではデータの重複を排除できない場合がある。
例えば、学生番号と科目コードの組み合わせで履修情報を管理するテーブルや、社員番号と研修コードで受講履歴を記録する中間テーブルなどでは、単一の列では重複が発生する。そこで、複数の列を組み合わせて、その値の組み合わせに重複が生じないよう定義したものが複合主キーである。
複合主キーを採用する利点は、システムが自動生成する通し番号のような(それ自体は無意味な)「代理キー」(サロゲートキー)を新設することなく、業務データとして本来存在する意味のある既存の列である「ナチュラルキー」だけでテーブルを構成できる点にある。これにより、不要なデータ項目の増加を抑え、データ構造そのものの意味に基づいてレコードを識別でき、データモデルの整合性を保ちやすくなる。
一方で、複数の列を条件として紐付けるため、データの検索や結合を行う際の処理が複雑化し、データベースの処理性能が低下する要因になることがある。また、他のテーブルとの関連付け(外部キー参照)を設定する際、参照元となるすべてのテーブルに同一の列構成を持たせる必要があり、設計の柔軟性が失われやすい。主キーを構成する列の値が後から変更された場合の影響範囲も広く、修正処理に手間がかかる。
そのため、近年のデータベース設計では、業務上の意味を持つ列の組み合わせを一意制約(ユニーク制約)として定義し、主キーには自動採番された単純な識別子を用いる方式が広く利用されている。設計や運用の負担を軽減するため、複合主キーの使用を中間テーブルなどに限定し、データの性質や要件に応じて単一の主キーと使い分けるのが一般的である。