第16回 私は初心者です?「4.いつかは通る道 〜 やっぱりデータベース」

16−4 いつかは通る道 〜 やっぱりデータベース


「センパイ、センパイ。六三亭って店、知ってます?」
「六三亭、知らんなぁ。」
「でしょ?隣町の駅裏で見つけたんですけど、スゴイんですよ。」
「スゴイって、どんなんだよ?」
「定食屋の癖に、全品、料理長のお任せなんですよ。それも、重複なし!」
「ほぉ、スゴイな。シェフの気まぐれサラダを極端にしたような店かよ。そりゃ興味あるな。」
「でしょ、店の情報、調べてきましたから、今度行きましょう。これ、ご自慢のPalmに入力しておいて下さいよ。」
「え、あ、ああ。これは、すぐには入力できないんだ。」
「へ?!何でですか。店の情報は取り出せても、新しい店は登録できないんですか?」
「出来ないことはないけど、その時、1度プログラムを直さなきゃならないんだ。」
「何か、面倒なんですね。」


◆◆◆◆◆◆◆◆


自分用で使っているうちは、適当に追加してコンパイルしなおせば良いのであまり気にしていなかったし、自宅でメールをチェックするついでに作業が出来たので面倒とも思わなかったが、確かに、こういうケースでは不便だな。
まさか、パソコンを持ち歩いて、なんて訳にもいかないし、会社のパソコンは私的なツールのインストールが禁止されているからなぁ。
やっぱり、データベースとか言うのに手を出さなきゃならんのか…

困った時のamiさん頼みか。前も普通に返事が着たから、この際、ついでに聞いてみよう。

    『…という訳で、配列変数を使ったプログラムを作ることは出来まして、それなりに便利になりました。
    しかし、今後、新たな店の情報を追加することを考えると、データベースというのを使った方が良いのでしょうか?…』


◆◆◆◆◆◆◆◆



返事だ。
えっと、

    『…そろそろ来る頃だと思っていました。』

え?

    『たぶん、配列変数だけでは、そのうち苦しくなるだろうと思っていましたが、予想は当っていたようです(笑)』

うっ、見透かされてるよ。つーか、その時、教えてくれれば良いのに〜

    『ということで、データベースの説明を簡単にしてみましょう。ひとまず、バトンタッチしてください。』


■□■□■□■□■□■□■□■□■□■□■□■□



さて、バトンタッチ。ここからは、mizuno-amiがお送りいたします。
センパイ君も、よくここまでやってくれましたが、恐らく、初心者と称される方々も、データベースとなると身構えてしまうんでしょうか。
やはり、配列変数以上に難解じゃないかなぁ、という気を起こさせるデータベースですが、そもそもPalmで扱うデータベース自体が、それほど複雑な処理ができないので、Palmに限れば、それほど難しいものではありません。
とりあえず、データベースというものが何か、配列変数と比べながら、イメージすることを目指しましょう。


まず、配列変数ですが、これは「背番号付きの箱」に例えて表現することが出来ます。
これだと、番号さえ分かれば、その箱の中身を取り出すことが出来て便利なのですが、その逆に、中身が分かっても箱の番号は分かりません。
これは単なる仕組み上の問題なのですが、背番号は自動的に箱に割り振られます。まぁ、単なる識別の番号ですね。それでも、番号さえわかれば、箱が特定できるようになっています。そういう仕組みです。でも、箱の中身については特に規定がなく、使う側が自由に使えるようになっているので、箱の中身から番号を特定するようにはなっていないのです。
こういう箱を特定するような番号のことを「インデックス」と言います。特に「他に同じものがない」という意味で「ユニークな番号」という表現をする場合があります。
ユニーク、というと「面白い」とか「可笑しい」というイメージがありますが、そもそもは「他にない」とか「独創的な」という意味なので、こう表現します。

どちらにしても、配列変数が便利なのは、簡単に箱の中身が検索できるユニークなインデックスを持っている点であると言い表すことが出来ます。
ユニークな番号がついているおかげで、例えば3番目の変数の中身を簡単に取り出したり、変更したりすることが出来ます。


実は、キーモード(Key Mode)のデータベースは、これと全く同じ考え方になります。
同じ考え方で、違う点はインデックスの取り扱いになります。
配列変数の場合、インデックスは数字である必要がありましたが、キーモードのデータベースでは数字でも文字でも、どちらでも使うことが出来ます。



ただし、インデックスの定義にしたがって、重複しないよう「ユニーク」でなければなりません。
例えば電話帳データベースを作って「MIZUNO」の電話番号を登録した場合、次のような形をイメージできます。

    インデックス:MIZUNO
    電話番号:9999-1111-2222

これで、「MIZUNO」さえわかれば、電話番号が簡単に検索できます。それがデータベースです。
さて、インデックスの定義から考えると、この電話帳データベースには「MIZUNO」は1人しか登録できないことになります。
2人目の「MIZUNO」は許可されません。



融通がきかないようですが、仕方がありません。
したがって、私たちがデータベースを利用しようとする場合、どのようなインデックスを作ればよいのかを考えなくてはなりません。
今回の場合、

    インデックス:Palmなお部屋のMIZUNO

とすれば、この電話番号データベースでは(恐らく)ユニークなインデックスになるでしょう。
このように、ユニークになるインデックスを「利用する目的に合わせて、自分で考えなければならない」という点がデータベースの難しい点ではないでしょうか。配列変数の場合、強制的に数字が割り振られますから、それを使うしかありません。強制される不自由さはあるのですが、それしか選択肢がないというのは、ある意味、容易なんですね。

ところで、電話帳のデータを考えると、名前よりも電話番号のほうがユニークであると思いませんか?
確かに、電話番号が重複することはありませんので、インデックスに適しているように思えます。
しかし、電話帳として必要な機能は、どちらかと言えば、名前から電話番号を検索する機能なので、電話番号をインデックスにするのはナンセンスなのです。
仕組み上、インデックスじゃない方のデータは、検索を前提とした構造にはなっていませんので仕方がないのですが、用途や目的によって、インデックスを工夫して「設計」しなければならない点が難しい、という事ですね。

設計などと大袈裟ですが、幸い、NS Basicのデータベースでは、インデックスの項目は1つしかありません。なので、ある意味難しいですが、内容はかなり単純です。
重複しないようなインデックスを1種類見つければ、それだけでデータベースの設計は半分くらい終わっていますし、電話帳のデータベースでも分かるように、目的が決まればある程度の方向性が決まってきます。

また、データベースの1つのレコードには、1種類のデータだけではなく、数字や文字列など複数のデータをぶら下げることが出来ます。この辺りは、ユーザー定義を使った配列変数でも可能ですが、データベースを使った方が便利でしょう。

もう1つの重要な特徴は、データベースがプログラムとは別に独立している1つのファイルである点でしょう。
配列変数であれば、プログラム中で定義して、プログラムが終了すれば記憶の彼方に消え去ってしまいます。一方、データベースはファイルとして存在しますから、電源を切っても消えることはありませんし、HotSyncすればPC上にバックアップされます。
色々な意味で便利そうですが、データベースがファイルであるため、取扱い上、配列変数とは違った作法が幾つかあります。それは次に紹介しますが、ひとまず、こんなところでデータベースのイメージは掴めたでしょうか?

おっと、キーモードとノンキーモードという言葉については説明してませんね。
えっとですね「キー」とはカギです。データベースのカギ、そう、インデックスのことですね。
一方、ノンキーモードというのは、カギがないデータベースです。ただ、それではデータを取り出すことが出来ませんので、上から何番目という情報くらいは得られるようになっています。ひとまず、配列変数に近いと理解しておいて間違いではありません。

前へ    目次へ    次へ

第16回 私は初心者です?「4.いつかは通る道 〜 やっぱりデータベース」