「2つ(あるいは3つ以上)の列の値によって1つのレコードを特定できる」という場合には、それらの列をひとまとめにして主キーにすることができます。これを複合キーといいます。
以下では2つの列をまとめて主キーにする例をみてみます。
設定例1:単純な例
サンプルはこのようなテーブルです。
部屋の情報を記録しているテーブルで、建物番号と部屋番号という2つの番号があります。
同じ建物番号をもつレコードが複数あり、また、同じ部屋番号をもつレコードも複数あります。
しかし、建物番号と部屋番号の組み合わせ(全体)でみると重複することはなく、この組み合わせにより1つの部屋を特定することができます。
よって、この2つの列を主キーとして設定することができます。
では設定です。
テーブルのデザインビューで、列名の左端のレコードセレクタをドラッグし、2つの列を選択した状態にします。
メニューの「主キー」をクリックします。
すると2つの列に鍵マークがつきました。これが複合キーです。
以前のバージョンよりマークが小さくなってわかりにくくなった感じがしますけども、いずれ設定は以上で終了です。
なお、同様に3つ以上の列からなる複合キーを設定することもできます。
(下の画像)建物番号が2、部屋番号が4というレコード(7番目のレコードと重複)を追加しようとするとおなじみの長いエラーが出現します。
設定例2:列が飛び飛びになっている例
さて、このように複合キーを構成する列(建物番号と部屋番号)が離れている場合はどうでしょう。
(細かい話になりますが、同じ建物番号と建物名が繰り返し記録されており、正規化の観点からは不十分なテーブルです)
このような場合、デザインビューで左端を「Ctrl+クリック」することで列を飛び飛びに複数選択することができます。
(列そのものを移動させて上記の例と同様に設定してから元に戻すという対応も可能です)
「主キー」をクリックすると、やはり2つの列の左端に鍵マークが出ました。
見た目的に「個別の主キーが2つできた」ようにも見えますが、効果は最初の例と全く同じで「2つの列からなる主キーができた」というのが正解で、つまりこれも複合キーです。
(下の画像)最初の例と同様に、建物番号が2、部屋番号が4というレコード(7番目のレコードと重複)を追加しようとするとエラーになります。
個々の列は単独では主キーではありませんので、同じ建物番号を持つレコードを追加することも、同じ部屋番号を持つレコードを追加することも可能です。