複合主キー
データベースのキーだよ
データを一意に識別するための項目だよ
2つ以上の項目を見ることで一意に識別できるよ
簡単に書くよ
複合主キー(読:フクゴウシュキー 英:composite primary key)とは
主キー
(データの出席番号として使われる項目、データを一意に特定するための項目)の分類のひとつ
であり
複数の項目がワンセットになることで1つの主キーとしての役割を果たす主キーのこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・データベース
・テーブル
・キー
・レコード
・一意
・主キー
について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
データベースは「データを入れておく箱」です。
ただし「データベース」という用語は、実際には もう少し複雑な概念です。
データを入れておく箱そのものは「テーブル」と言います。
とりあえず
データベースの話において、実際にデータを入れておく箱がテーブル
と覚えてください。
キーは「データベース(のテーブル)において何かのカギになりそうな項目」です。
データベース(のテーブル)は表形式のイメージで表現されるのが一般的です。
この表において、何か特別な意味を持たされた項目を「キー」や「キー項目」と呼びます。
レコードは行列で表現される表の「行」です。
ただし、今回は「データベースに入っているデータ(行)」と解釈してください。
繰り返しになりますが、データベース(のテーブル)は表形式のイメージで表現されるのが一般的です。
例えば以下のような形です。
| 名前 | 性別 | 年齢 |
|---|---|---|
| ピヨ太 | 男 | 成人済み |
| ピヨ子 | 女 | 永遠の17歳 |
| ピヨ太ママ | 女 | 心は乙女 |
この表には、ピヨ太君、ピヨ子さん、ピヨ太ママの3人分のデータが入っています。
名前と性別と年齢のセットで1行です。
この表におけるそれぞれの行、名前と性別と年齢のセットがレコードです。
さて、ここで考えてみてください。
1行には1人分のデータが入っています。
1行で1件のデータです。
そのため、データベース(のテーブル)にしまったデータそのものを指して「レコード」と表現する場合も あります。
例えば、データベース(のテーブル)にデータを入れることを指して「レコードを作る」と言ったりします。
あるいは「2件以上のデータ」を意図して「複数レコード」と表現する場合も あります。
基本的には「行」の意味ですけどね。
「データ1件」を意図する場合もあるのです。
一応、頭の片隅にでも置いておいてあげてください。

一意の意味は「重複しないよ~」です。
すべてのデータがオンリーワンだったら「一意である」と言えます。

主キーは「データを一意に識別するために使われる項目」です。
「一意に識別」とか書いてあると難しそうに見えますが、恐れる必要は ありません。
データの出席番号みたいなイメージです。

出席番号は生徒を特定するために使う番号です。
例えば、ピヨ太君の出席番号が「男子1番」でした。
ピヨ子さんは「女子2番」です。

おっと、大変です。
ピヨ太ママ先生から「男子1番!今すぐ職員室に来なさい!」と呼び出しが ありました。

出席番号が「男子1番」の生徒はピヨ太君ですよね。
出席番号を見れば、どの生徒を指しているか分かります。

それと同じです。
「主キーの値が○○なデータ!」と言えば「あっ、このデータ(行、レコード)だな」と判断できるのです。

項目を主キーとして使うには
1.中身が空ではない
2.中身が一意である
の条件を満たしている必要があります。
これも出席番号をイメージすると分かりやすいと思います。
出席番号が空だったら困りますよね。
「出席番号:(空)」なのか「出席番号:(未割当)」なのか判断できません。
だから
1.中身が空ではない
という条件があります。

また、同じ出席番号の人が2人以上いたら困りますよね。
「出席番号○○番の人!」と呼ばれたときに、どっちが呼ばれたか判断できません。
だから
2.中身が一意である
という条件があります。

以上を踏まえて
複数の項目で1つの主キーとしての役割を果たす主キー
が「複合主キー」です。

例えば、テーブルの中身が以下の内容だったとしましょう。
| 出席番号 | 名前 | 性別 |
|---|---|---|
| 1 | ピヨ太 | 男 |
| 1 | ピヨ子 | 女 |
| 2 | ピヨ太ママ | 女 |
「出席番号」は男女別に割り振られています。
だから「出席番号」だけではデータを特定できません。
「出席番号が『1』番の人!」と言っても、ピヨ太君のことかピヨ子さんのことか分からないからです。
「出席番号」は主キーにできません。
ただし「出席番号」と一緒に「性別」も見るとデータを特定できます。
「出席番号が『1』番で性別が『男』の人!」と言えば、ピヨ太君のことだと分かりますよね。
「出席番号+性別」なら主キーとしての役割を果たせます。
この話において「出席番号+性別」で主キーとするのが複合主キーです。
実際の項目は「出席番号」と「性別」です。
この2つをワンセットの扱いにした上で「主キーとして使いますよ」設定をすると複合主キーになります。
一言でまとめるよ
まぁ「複合主キー」って単語が出てきたら「複数項目でワンセットな主キー
(データの出席番号として使われる項目、データを一意に特定するための項目)なんだな~」と お考えください。






