【キーについて】



このHPはキーについてまとめたものです。


1-1 主キー(PRIMARY KEY)とは



あるテーブルと他のテーブルのレコードと結び付けるには、テーブルの中でそのレコードが唯一の存在であるフィールドと結合する必要がある。そうでないと、結合する側のテーブルのレコードを、1件に絞り込むことができないため。


そこで、テーブルのレコードを1件に絞り込むための鍵となるフィールドの存在が必要になってくる。このフィールドのことを、「主キー(PRIMARY KEY)」という。主キーが設定されているフィールドには、重複する値を登録することはできない。また、主キーは1つのテーブルに1つしか設定できず、主キーに設定したフィールドには「NULL」を格納できない。下図でいうと【busyoテーブル】の「busyo_code」が主キー。


下図は、【syainzyoho】テーブルと【busyo】テーブルをあらわしている。【syainzyoho】テーブルには、各社員が所属する部門の「busyo_code」が格納されている。「suzuki_ziro」さんは、「busyo_code」が「30」なので、【busyo】テーブルの「busyo_code」が「30」の行を探すと、「eigyo」に所属していることが分かる。











1-2 外部キー(FOREIGN KEY)とは


外部キー(FOREIGN KEY)とは、関連したテーブル間を結ぶために設定するフィールドのことで、データの整合性をデータベースに保証させるために利用する。
外部キーとして設定できるフィールドは、
参照される側のテーブルの主キーのみ。
下記の【syainzyoho】テーブルと【busyo】テーブルの例で言うと、【syainzyoho】テーブルの外部キーとして設定できるフィールドは、参照される側の【busyo】テーブルの主キーである「busyo_code」のみとなる。




のテーブルを参照することを「外部参照」というが、外部参照されているテーブルから既に他のテーブルより参照されているレコードを削除したら、その社員レコードは部署テーブルのつながりが無くなってしまうことになる。
そのため、データベースは外部キーの値を自動的に特定の値に変えたり、もしくは外部キーに設定されているデータを削除できないようにする仕組みを持っている。また、【syainzyoho】テーブルの「busyo_code」には【busyo】テーブルに存在しない値を格納することはできない。







1-3 複数のフィールドを組み合わせる主キー


主キーを設定するフィールドには、他のレコードと重複しない値が必ず入力される必要があるが、テーブル内にそのようなフィールドがなくても、複数のフィールドを組み合わせることで1つの主キーを設定できる。たとえば以下の様に、<郵便番号1>フィールドと<郵便番号2>フィールドに分けて格納するテーブルがあるとする。
その場合、
どちらのフィールドにも重複する可能性があるため主キーを設定できない。
しかし、この2つのフィールドの値の組み合わせが他のレコードと重複しない場合は、2つのフィールドを組み合わせて主キーを設定できる。












1-4 ユニークキー


主キーでなくても、フィールドに重複したデータを格納できないようにすることができる。
重複したデータを格納できないように設定したフィールドのことを「ユニークキー(Unique Key)」と言う。主キーもフィールドに重複したデータを格納できないので、主キーであると言う事は、ユニークキーでもある。
ただし、ユニークキーだからと言って主キーだとは限らない。


主キーは1つのテーブルに1つしか設定できないが、ユニークキーは、1つのテーブルに複数設定することができる。また、主キーに設定したフィールドには「NULL」を格納できないが、主キーではないユニークキーに設定したフィールドには、「NULL」を格納できる。


ユニークキーの例を見てみる。下図はある会社の顧客住所テーブル(【kokyakuテーブル】)を表している。

この会社の顧客には、一般顧客と会員顧客があり、会員顧客は会員番号で管理されている。
顧客データを管理する顧客テーブルでは、
会員顧客の場合、「会員番号」フィールドには重複しない数値が格納されている。一般顧客の場合、「会員番号」フィールドには「NULL」が格納されている。
このような場合、フィールドに重複したデータを格納できないようにするには、「kaiinnumber」フィールドを主キーではなく、ユニークキーに設定するのが適切。