主キーとは、テーブル内のレコードを識別するためのフィールドです。以下の条件に当てはまるフィールドを主キーに選びます。
新しいテーブルに主キーを設定しないで保存しようとすると、
「主キーが設定されていません。」という内容のダイアログボックスが表示されます。
主キーを設定すると、並べ替えが高速になる、他のテーブルと連携できるというメリットがあります。
「主キーが設定されていません。」という内容のダイアログボックスで[はい]ボタンをクリックすると、
「ID」という名前のオートナンバー型のフィールドが自動的に追加され、そのフィールドが主キーに設定されます。
テーブルのデザインビューでフィールド名と型を設定したあと、主キーに設定するフィールド名の左横のグレーの帯部分に
マウスカーソルを持って行くと右向き矢印アイコンに変わります。
そこで左ボタンを押すとフィールドが選択されます。
ここで主キーボタンを押すとグレーの帯部分に小さい鍵アイコンが表示され、主キーに設定されたことが分かります。
ダウンロードした「見積書.xlsx」を開いてみてください。
『1枚に1つしかない情報』と、『何行も書ける情報』の2種類が混ざっていることが分かります。
もしこれを分けずに1つのテーブル(エクセルのような1シート)にまとめたものが、「見積元データ.xlsx」の「見積書(1行)」シートになります。
見て分かるように、3行の商品を見積もるだけで、同じ『顧客名』や『日付』を3回も繰り返し書く羽目になりますし、空白セルも無駄になります。
これではデータが無駄に膨らむだけでなく、打ち間違いの原因にもなります。だから、分ける必要があるのです。
| 分けない場合(エクセル風)のデメリット | 分けた場合(データベース)のメリット | |
|---|---|---|
| データ容量 | データの無駄づかい 同じ見積番号、顧客名、日付が 何行にもわたって何度も繰り返し保存される。 |
すっきり保存(容量削減) 共通情報は1回だけ保存し、 明細は必要な行数だけ作るので無駄がない。 |
| データ修正 | 修正ミスが起きる 見積日付を「10月1日」から「10月2日」に変えるとき、 全ての行を漏れなく書き直さないとデータが矛盾する。 |
修正が1箇所で済む 見積テーブルの日付を1箇所変えるだけで、 紐づくすべての明細に一発で反映される。 |
| データ集計 | 計算が狂う 見積の「合計金額」を同じ行に書いてしまうと、 エクセルで合計を出すときに重複して集計されてしまう。 |
集計が正確 合計金額は明細の金額を足すだけで いつでも正確に計算できる。 |
いままで作成したテーブルはすべて1つの主キーフィールドが設定されていました。
しかし「見積明細」テーブルには2つの主キーフィールドが設定されています。なぜでしょうか?
「見積ID」には複数の商品の明細行がにも付いています。そのため、「見積ID」には同じ値が入る場合があります。
これでは主キーの要件に当てはまりません。
「商品ID」も、複数の顧客が同じ商品を見積依頼する場合があるので、これも主キーの要件を満たしません。
しかし、1つの見積書には同じ商品の行が1回しか現れないとすればどうでしょうか。
「見積ID」と「商品ID」を組み合わせると、主キーの要件を満たすことが分かります。
1つの列だけではレコードを一意に識別できない場合に、2つ以上の列を組み合わせて設定する主キー。
これまで主キーを設定した方法で2つのフィールドを主キーに設定しようとすると、1つめのフィールドは主キーに設定できますが、
2つめのフィールドを主キーに設定しようとすると、主キーボタンを押したとたんに先に設定していた主キーの鍵アイコンが消え、
今選択したフィールドだけに鍵アイコンがついてしまいます。
複数のフィールドを組み合わせて主キーに設定するには以下のようにします。
まず、1つめのフィールド行を選択した後、キーボードの[Ctlr]キーを押したまま2つめのフィールドを選択します。
(連続したフィールドを複数選択する場合は、最初の主キーのフィールド名の左のグレーの帯の上で
マウス左ボタンを押したまま下にドラッグすると複数のフィールドが選択されます。)
この状態で主キーボタンを押すと、選択したフィールドすべてに鍵アイコンがつきます。
テーブルの作成が出来れば、次にリレーションシップを設定します。
リレーションシップは、主キーまたは各行の一意識別子列を、あるテーブルから別のテーブルのフィールドに接続して
関係性を定義することです。呼び出す側のテーブルの列は「外部キー」と呼ばれます。
この「外部キー」は複数現れても問題ありません。
[データベースツール]タブの[リレーションシップ]ボタンを押します。
![[リレーションシップ]ボタン](rerationship.png)
すると、テーブル・クエリの選択ウィンドが表示されますので、必要なテーブルをすべて選択して追加します。
一つずつ追加することも出来ますが、複数選択して1度に追加する方が効率的です。
複数選択する場合は、選択する最初のテーブル名をクリックして選択した後、[Shift]キーを押しながら最後のテーブル名をクリックする。
飛び飛びの項目を選択するには、 [Ctrl]キーを押したまま、テーブル名をクリックして選択する。
このウィンドは、テーブルを追加しても自動的には閉じないので、追加が終われば右上の閉じるボタンで閉じておきます。
これで画面上に選択したテーブルの構造が表示されます。
次に、関連付けたいフィールドの片方(「主キー」、「外部キー」のいずれでも可)の上にマウスカーソルを置き、
マウスボタンを押したままドラッグして、関連付けるテーブルのフィールドの上にドロップします。
ドロップするとウィンドが表示されるので、[OK]を押すとウインドが閉じます。
リレーションシップの画面上には2つのフィールドが線で結ばれます。

ここで気づかれた方もいらっしゃるでしょうが、配布した資料では線の両側に[1]や[∞]マークがついているのに、
今設定したリレーション図には線だけしか描かれていません。
これは、1対多を表すマークで、[参照整合性]を設定したときに表示されます。
先ほどリレーションを設定したフィールド名の下にチェックボックスが並んでいます。
その[参照整合性]にチェックを入れて[OK]を押すと[1][∞]マークが表示されます。

「参照整合性」にチェックすると、[外部キー]のフィールドには「主キー」に入力済みである値しか入力できないようになります。
これによりデータの整合性を保ち、矛盾のないデータ管理を行うことができるようになります。