<HOME  <お願い事項   <Access2002 TOP   <Access2000 TOP   <サイト内検索
 MS-Access97超入門>基本をマスターしよう


 (読み終わりましたら、ブラウザの[←]戻るボタンで、戻ってください)

■主キーとは?

汎用機とか、大型のコンピュータで動くデータベース機能の中では、キーフィールドという考え方は当たり前のことなんですが。。。
パソコンのデータベースで何もそこまで・・・と思っちゃうこともあります。
でも、これ、とっても大切な設定なんです。

とりあえず操作だけやってみましょう。このテーブルの中では、「番号」という一番上のフィールドを使います。
このフィールド名のすぐ左側を見てください。小さいグレーの四角い部分がありますよね。こういう部分のことを「セレクタ」といいます。
クリックすると、ちょっとへっこんだような感じになって、1行分マックロになります。
この状態で、ツールバーの中の「黄色い鍵の絵のボタン」をカチッとやります。と、さっきのセレクタのところに、小さい鍵の絵がつきます。
間違ったフィールドに鍵の絵がついちゃってたら、慌てずもう一回ツールボタンをカチッと押します。

主キー?

これで、「番号というフィールドは、このテーブルの主キーとなった」わけです。


主キーとは何でしょう。
実際にいろいろ使っていくと、このテーブルの中にデータがどんどん蓄積されていくわけです。
ちょっと表をイメージしてみましょう。

番号 顧客名 住まい 年収 入力日
01 ジョン・ロード 東京 555,000,000 98/01/04
02 ジョン・テイラー 岡山 780,000,000 98/02/15
03 ジョン・ボン・ジョヴィ 新潟 987,000,000 98/01/16
04 ジョン・サイクス 福岡 579,440,000 98/01/18

まだまだどんどんデータが蓄積されるとします。
でも、テーブルの中のレコードは、いつもぴしっと整列しているわけじゃないんです。
普段はだらだらしてます。

自分の目でちゃんと見たわけじゃないんですけど、パソコンのディスクの中では、データはつながって保存されてるわけじゃない。
細切れにあっちこっちに保存されるんですね。

呼び出しがかかって、「ジョン・テイラーさんの住まいはどこですか?」と聞かれたりしたら、ぞろぞろ整列して、こんな形の表になったり、印刷の対象になったりするわけです。
だから、なんか目印というか、整列の基準みたいなのがないと、もたもたして時間がかかったりするわけです。

そこで、いついかなる場合でもぴしっとレコードが整列できるように、指針となるフィールドがひとつないし複数あると、Accessにとってはありがたいわけなんです。
その指針となるフィールドが「主キー」。このテーブルでは、「番号」というオートナンバー型を設けました。

主キーになるには、ちょっと厳しい条件があります。

「同じデータが、そのテーブルの中に1回しか入力されないフィールド」ってことです。
重複しないフィールドということですね。よく考えれば当たり前のことですけど・・。
例えば伝票番号とか、社員番号とか、会員番号とか、ああいった番号。絶対ダブってないですよね。
同じテーブルの中に、同じデータが2度入れられなくなるわけです。
そ、りゃそうですよねぇ。このフィールドの中身を頼りに、レコードが整列するんですから、おんなじのが2つも3つもあったら、かえって混乱します。

クラス名 名前 担当 収穫数 会員番号 クラス名 名前 担当 収穫数
キリン組 ジョン・テイラー 火星 452 040101 キリン組 ジョン・テイラー 火星 452
からす組 ジョン・ロード 木星 228 054140 からす組 ジョン・ロード 木星 228
キリン組 ジョン・ボン・ジョヴィ 金星 1280 001158 キリン組 ジョン・ボン・ジョヴィ 金星 1280
らくだ組 ジョン・サイクス 火星 228 012870 らくだ組 ジョン・サイクス 火星 228
うさぎ組 ジョン・クーガー 木星 141 031510 うさぎ組 ジョン・クーガー 木星 141
↑クラス名や名前は、同じになる可能性あり。 ↑会員番号はダブらないので主キーにぴったり

でも、必ずしもどのテーブルにも、主キーにふさわしいフィールドがあるかというと、そうはいかないですよね。

なので、もし、作ったテーブルの中に主キーにふさわしいフィールドがない場合、オートナンバー型というフィールドが役に立つわけです。
無理に主キーを作らなくても、テーブルとして成り立ちますけれど・・・。
でもきっと、Accessに限らず、こんな感じのデータベース・ソフトでは、こういう考え方は必須なんだと思います。

オートナンバー型というのは、Accessが勝手に番号を付けてくれるという、非常に単純なタイプのフィールドです。
別に番号は何番でもいい、でも主キーは必要と思われるというとき、とっても便利。Accessにお任せです。
その代わり自由は全然ききません。勝手に番号がついていきます。

同じ番号の伝票を数回入力することがあったり、主キーらしきフィールドがないテーブルの場合、このオートナンバー型のフィールドをひとつダミーっぽく作るケースが多いですね。

でも、多分、無理に主キーを作らなくても、そんなに不自由は感じないと思います。
それに、意味もなく主キーに設定すると、そのフィールドには同じ値を2度以上入力できなくなるし、空欄のままというのも許されなくなるので、ヤミクモに設定するのもちょっと危険かもしれないです。主キーにふさわしいフィールドがあるのに、わざわざオートナンバー型のフィールドを別に作ったりするのもあまり好ましいことじゃないし・・・。
この辺はゆっくりと見極めていってください。

電話帳をみて、友達の電話番号を探すとしますよね。電話帳はどういう順番に情報が並んでるでしょう。
多分、住んでいる地域とか、名前の順とか、一定の並び順があるはずですよね。
でも、別に電話帳を作った人が書き込んだ順番に電話番号が並んでても、電話帳は電話帳だと思います。
同姓同名で漢字もおんなじ、っていう人もたくさんいるかもしれないし・・・。
でも、なーに、3日間くらい目を皿のようにしてじーっと見詰めていれば、友達の電話番号、見つかりますって。

・・・って、これじゃ暴動がおきそうですよね。ぜんぜん便利な電話帳じゃないです。
データベースも、処理しやすいように、レコードが整列しやすいように、内部的に「なんか目印になるフィールド決めておいてくれないかなー」と、思ってますよ。
きっと。主キーって、そういうもんだと思ってください。


[インデックスってなんぞや]

テーブルの中のレコードをそのまんま利用するだけなら問題ないのですが、例えば「住所が東京の顧客だけ表示させたい」とか「取引額が多い順に顧客の一覧を出したい」とか、そういうリクエストって出てきますよね。きっと。こういうリクエストに答えるのが「クエリー」の仕事なんですが、主キーのところでも述べたように、テーブルの中のレコードは、データが取り出しやすいようにぴしっと整列しているわけではないんですね。

主キー以外の条件でデータを取り出したり並べ替えたりする場合、少しでも早く並べ替え終えて結果を表示してもらえるよう、テーブルの中にも多少の工夫をする必要があります。特にレコード数が5,000件10,000件と多くなってくると、目に見えて処理速度は遅くなるものなのです。

そこで用意されている機能のひとつに「インデックス」というものがあります。私たちが普段読む本の中には、目次以外に「索引」というものが付いてる場合がありますよね。
目次を使って第1章からずーっと項目を見ていくより、探したいキーワードでページを探した方が速い場合があります。

でも、それは、ほんの作者の方が「こういうキーワードで探したい人がいるんじゃないかな?」とあらかじめ予測して、索引を作ってくれているから実現することであって、索引に乗ってないキーワードで探したいなと思っても、その場合は1ページ目から丁寧に読んでいくしかないです。

インデックスは、その索引みたいなもんです。テーブルにあらかじめ「このフィールドで並べ替えとかするかもしれないから、覚悟しといて」と言付けておくわけです。

設定の仕方はカンタンです。

まず、「インデックスにしたいな」と思うフィールド名をクリックしておきます。
画面下のプロパティ欄を見ましょう。一番下に「インデックス」というプロパティがあるはずです。
通常、特殊なフィールドを除いて「いいえ」という状態になっています。
インデックスの指定がなされてないよ、という意味です。

ここを「インデックスあり」に変更すれば、設定完了です。


重複ありとなしがありますね。これは、主キーの考え方と同じです。
「そのフィールドに、同じ値が2度以上入力される可能性があるなら(重複あり、同じ値が絶対入らないなら(重複なし)」という基準で選びます。

また、複数のフィールドを組み合わせて、ひとつのインデックスを作ることもできます。

ツールボタンの中に「インデックス」というボタンがあるので、これをクリックします。
すると、複数フィールドを組み合わせたインデックスを作るウィンドウが出てきます。

インデックス名は何でもいいと思いますが、フィールド名と同様に分かりやすいものを。
で、そのインデックスの中に含めたいフィールドを選びます。

これで、「へっぽこキー」という名前で検索をすれば、フィールド1とフィールド2の両方を使ってすばやく検索できるようになります。

無理に複合インデックスを作らなくてもいいのですが、Visual Basicの中では、インデックスを使って検索する処理も出てきます。
そんな時にこの辺の操作をちょっと思い出していただければ、とりあえず事足りると思います。



(読み終わりましたら、ブラウザの[←]戻るボタンで、戻ってください)