RDBのキー関連用語

スーパーキー(Super Key)

タプルを一意に識別できる属性集合のこと。
一意にさえできればよいので属性の組み合わせでもよい。

候補キー(Candidate Key)

スーパーキーの中でどれか一つでも欠けるとレコードが特定できない組み合わせのことを候補キーとよぶ。
つまり候補キーは決まれば必ずレコードを確定できる組み合わせの中で極小な組み合わせのことである。
つまり主キーが2つの属性の組み合わせであった場合、「極小の組み合わせ」という制約から他に候補キーがあるとした場合でも、それは2つの属性の組み合わせであり3つ以上の組み合わせや単一の値にはなりえない。
候補キーの名前の由来は「主キーの候補になる」ことから来ているらしい。


候補キーにNULLを許すか。許す派と許さない派が両方存在しているため、一概には言えないが現状許す派が多いみたい。
ただ、NULL値を許すと主キーの条件から外れる為、「候補」キーという名前に反するのではないかとかなんとか。。。

非キー属性

どの候補キーにも含まれない属性のこと。

主キー(PrimaryKey?)

リレーションの中に複数候補キーが存在する場合に主に使用する候補キーのこと。
主キーはリレーションに1つだけ設定することができ、一意性制約(同じ表の中で重複してはいけない)とNotNull?制約(NULL値の設定は不可)という条件がかかっている。
候補キーの説明にも書いたとおり、候補キーの定義上はNotNull?制約が強制ではないため「主キーは候補キーのうちのどれか」っていうのはおかしいんじゃない論争がある。

外部キー(Foreign Key)

他のリレーションの主キー(または候補キー)を参照する項目のこと。
概念データモデルから関連型データモデル(論理データモデル)に落とし込む際に、
エンティティはリレーションをリレーションシップは外部キーに対応付けられる。
リレーション間の関係(1対1か1対多か等)によってどちらのリレーションの主キー(あるいは候補キー)を外部キーとして組み込むのが適切かは変化する。