データベースを作成してある程度のデータが蓄積すると、データを使った分析や、必要な情報の抽出が必要になってきます。この時に、似たようなデータの抽出が困難であったり、迅速なデータ処理をするための仕組みが必要になります。そこで、レコードを一義的に決めるためのフィールド設定として主キーについて紹介します。
レコードを一義的に決めるために
さて、データの蓄積により複数のレコードが作成されたことを前提に話をしていきます。例えば、以下のようなフィールドを持つテーブルにおいて、あるレコードを特定するためにはどうすれば良いかを見ていきましょう。
表 テストテーブルのフィールド一覧
フィールド名 | データ型 |
固有ID | オートナンバー型 |
氏名 | 短いテキスト |
生年月日 | 日付/時刻型 |
従業員番号 | 短いテキスト |
表 サンプルデータ
固有ID | 氏名 | 生年月日 | 従業員番号 |
1 | 鈴木 一郎 | 1965/04/15 | j65001 |
2 | 佐藤 太郎 | 1978/08/07 | j78008 |
3 | 山田 花子 | 1995/07/23 | j95012 |
4 | 佐藤 太郎 | 2000/12/28 | k00001 |
上記テーブルの中から、例えば「佐藤 太郎」のレコードを抽出したいとするときに、「氏名」フィールドを用いて、検索をかけることで「 佐藤 太郎 」のレコードを選び出すことができます。しかしながら、「 佐藤 太郎 」が同姓同名で固有IDが「2」と「4」の人がいます。また、「生年月日」フィールドも同じ生年月日の人が存在する可能性はゼロではありません。このように、レコードを「ただ一つ」、一義的に(=ユニークに)決めることできないフィールドでレコードを検索、特定することは好ましくはありません。
一方で、「固有ID」や「従業員番号」フィールドはどうでしょうか。まず、「固有ID」フィールドはオートナンバー型(1から連番の整数値が自動的に割り当てられ、使われた番号を再度使うことはしない。)を設定しているため、重複が起こらないデータが登録されます。また、「従業員番号」フィールドについても、基本的に従業員番号が重複するような運用はされないと考えられますので、こちらのフィールドについてもユニークなデータが登録されることが想定できます。
このように、ユニークなデータが入力され、結果そのレコード全体を一義的に決めることができるフィールドを「主キー」や「プライマリーキー(=Primary Key)」と呼びます。そして、プライマリーキーになりえるフィールドを「候補キー」と呼びます。
Accessでは「主キー」を簡単に設定することができます。例えば、「固有ID」フィールドに主キー設定をする場合は次のようにします。まず、「固有ID」フィールドの行をクリックします。
次に、「デザイン」タブの「主キー」アイコンをクリックします。
これにより、「固有ID」フィールド名の左側に「主キー」を示すアイコンが表示されます。
以上の操作で、「固有ID」フィールドが一義的にレコードを決めるためのフィールドであることを明示的に決定することができました。レコード検索をする際には、「固有ID」フィールドを用いることが推奨されます。
外部キーについて
先ほどは、主キーについて紹介をしましたが、正規化によりテーブルを複数に分けた場合には、「主キー」を関連付けに用いることになります。テーブルの関連付けについては、Accessで作る購買伝票について その4 テーブル構成 で紹介していますので、そちらをご参照ください。
ここで、外部キーとは別のテーブルと関連付けをする際に、対象テーブルの主キーのデータを参照するフィールドになります。このため、外部キーには重複があり得ます。
リレーショナルデータベースでは、正規化により複数のテーブルを扱うこともしばしばありますが、これらテーブルを紐づけるために、主キーと外部キーのリレーションが重要になりますので、最初の内は慣れないかもしれませんが、意味をしっかりと理解してテーブル設計に臨んでいただければと思います。
まとめ
今回は、データベースにおける主キー(=プライマリーキー)についての概念と、Accessでの主キー設定について紹介をしました。また、リレーショナルデータベースを構築する上で必要不可欠である外部キーについても紹介をしました。これらは、データを適切に扱うために必要な設定項目となりますので、是非内容をしっかりと確認していただければと思います。
スポンサーリンク
コメント