「ITって、何?」 第10問 データの世界には文法ってあるの?(1/2)
<< データの辞書と文法の話 >>
--文法、っていい方が適当かどうかわからないけれど、たとえるならば単語・文・文章にあたるものはそれぞれあるね。文章はどうやってできていて、単語というのが何で、単語をどう並べれば文章になるかの原理がある。
「それがコボルとかなんとかのコンピュータ言語なのね」
--あ、それは違う。ぼくがここでいっているのはあくまでもデータの構成原理の話。ぼくはここではコボルだのパスカルだのといったコンピュータ言語の話は一切するつもりはない。COBOLもPascalももう時代遅れだけれどね、まあそれはさておき。
「え、どうしてなの? それって違うものなの?」
--まったく別です。コンピュータ言語というのはね、プログラマという職種の人が、計算機で行う処理の細かな手順を書き留めるためのメモみたいなものだ。つまりプロセス、過程に関する記述。それは機械ならびにプログラマが解釈できればいいもので、普通の人が理解する必要はない。
これからぼくが説明するのは、データの構造の話で、つまりデータというブロックをつみ上げてデータベースという建物を作るときの考え方だ。どうやってフロアプランやレイアウトを作るか。これは、すくなくとも、その建物を利用する人にはみな関係がある。フロアプランがわからなければ行きたい場所にたどり着けずに迷ってしまうから。
プログラム言語なんてものは、いってみればエレベーターの制御方法や、空調ダクトをどう通すか、みたいなものだ。これは一般人には関係がない。
「じゃあその、フロアプランの規則を説明して」
--建物がふつう四角い部屋が集まってできているように、データベースというものも普通は四角い表からなりたっている。
「四角い表、って?」
--普通にどこにでも見かけるような表さ。たとえば、こんな風な:
商品名 JANコード 単価 仕入先名 仕入先電話番号
----------------------------------
チョコレート 4912345670001 192 昭和食品(株) 03-3456-1234
キャラメル 4906543218046 75 (株)三田製菓 03-7654-9000
メロンパン 4900223360097 120 昭和食品(株) 03-3456-1234
・・・ ・・・ ・・ ・・・ ・・・
(等幅フォントでご覧ください)
この表はすなわち、さっき説明した事物の世界における、コンビニの「商品」というエンティティに対応している。
「四角はわかったから、運転中にハンドルから両手を放すのはやめて! それに、いまどきコンビニにキャラメルなんて売ってないわよ。それにメロンパンですって、ふふふ。あなたの頭の中って小学校時代の駄菓子屋から進歩していないんじゃないの。」
--いいじゃないか、そんなこと! ・・とにかくね。これは商品という事物一つ一つについて、その属性が並んでいるという形式になっている。横に続くそれぞれの行が個々の事物で、縦に並ぶ項目が属性に対応する。
「それがExcelみたいな表計算なのね。」
--いや、あのね。ここでは当分の間、表計算ソフトのことは忘れてほしい。表計算ソフトというのは表みたいな「見え方」をつくったり計算したりするソフトで、ぼくがここで語っているのは四角い表という論理的な「構造」なんだ。
「なんだかよくわかんない。」
--混乱しやすいことはみとめる。でも、ここではソフトとかプログラムの話をしているんじゃなくて、その底に横たわっているデータの構造とか「文法」とかの話をしているんだろ? どうかしばらくの間、表計算ソフトのことは忘れてほしい。
「わかったわ、まだわかんないけど。それでその、属性だっけ、それがどうなったの?」
--データの四角い表の横1行が、事物の世界では個別のモノに対応する。これをね、データの世界では『レコード』と呼ぶ。さっきまでは、データ1件、とか言わざるをえなかったけれども、これからは1レコード、と呼ぶことにする。それから、事物の世界で属性と呼ばれている、表の縦の列は、データの世界では『フィールド』と呼ぶ。
「Field? なんで急にそんなところに“平原”が出てくるの?」
--このフィールドって用語は、はるか昔に、パンチカードでデータを集計していた時代からのなごりでね。カードの10桁目から20桁目まで、みたいな区画を意味していた。今ではフィールドやレコードよりも、もっとモダンな用語があるんだけれど、こういう慣習は根強いので、まだぼく自身ももっぱらこう呼んでいる。
「あなただって駄菓子屋時代から進んでいないもの。でもこれ、本当に文法の話?」
--このレコードが、言葉でいえばセンテンスにあたる。レコードの中の各フィールドの値が、単語に相当する。この単語というのは、前に説明したとおり、定型化されていなければならない。
「定型データの究極の最小単位は選択肢だ、っていってた、あれ?」
--ご名答。ある定められたメニューがあって、その中から特定の選択肢を一つ選ぶ。数値というのも、前に説明したように選択肢の一種だ。そして、どのフィールドにはどの選択肢が許されているか、メニューを定義しているものが、いわば言語における音韻規則にあたる。
「ふーん。でも、ちょっと待って。あなたがさっきあげた表の例でいくと、値段は数字かもしれないけれど、あとは選択肢でもなんでもないわ。たとえば電話番号。」
--いい質問だ。電話番号の各桁は、0から9までの数字とハイフンの中から選ばれる。そしてその組みあわせは、一定の条件を満たしている必要がある。全部で12桁以内、ハイフンは必ず2個、そして最後は必ず4桁の数字が続いている事、など。あるメニューからの選択肢という形をとれないようなものは、「単語」として許される範囲の規則を明確に決めなければならない。これも一種の文法さ。
「もしも規則に反するような単語がデータの中にあったらどうなるの?」
--データの処理をするプログラムが正常に動かなくなってしまう。たとえばさ、電話番号のデータをつかって、電話を自動的にかけるようなプログラムを組んでいたとしよう。もし数字とハイフン以外の文字が混ざっていたら、電話をかける装置が誤動作してしまう。だからふつうは、そういう文法に反するようなデータをユーザが入力しようとしたら、そこで警告のメッセージを出して受け付けない、という風にプログラムで防御しておく。ちょうど不審者の侵入を防ぐカード式エレベーターのように。これがプログラムの仕事だ。
「ふうん。でも、じゃあ商品名の方はどんなルールがあるの?」
--そう、こういう名前に類するフィールドは、一番規則がゆるやかだ。ここでは、名前に許される文字の種類、たとえばカナだけなのか、漢字も許されるかなどを決め、それから、字数の最大限を決める。20文字以内、とかね。
「ふーん。でも、最大何文字とかって決めきれないような場合はどうするの?」
--その場合はたとえば、『終わりの印』を決めておく。何文字でも好きなだけ続けていいけれども、文字列のおしまいである事が分かるような特殊な記号をおいて、それで締めくくる。
「よく外国の雑誌で一つの記事のおしまいを示すためにページの隅にロゴみたいなマークを打っているけれど、あれみたいなものかしら。」
--かもね。ただし、あれは文章の終わりで単語のおしまいじゃないけれど。
さて、こうして定型化された単語・すなわちフィールドの値がならんで、一つのセンテンス・つまりレコードを作る。もちろんレコードの中でどのフィールドがどの順番で並ぶのかに関しても、きちんとした規則が必要になる。ちょうど言語の文法が語順を規定するようにね。
同じ規則で作られた対等なレコードが並んでいる表を、テーブルとよぶ。
「それがさっきの四角い表なの?」
--そうだ。
「それがさっきの、えーと何だっけ、エンティティに対応するって訳?」
--そうです。
「つまりそれが翻訳なのね」
--事物の世界から、データの世界への翻訳です。あるエンティティについて、キーとなる属性と、その他の属性を並べたテーブルは、その事物の『マスタ』とよばれる。たとえばさっきみたいな表は、コンビニで売る商品のマスタ・データなので、「商品マスタ」という風に呼んだりする。
マスタは一種の辞書だと思えばいい。辞書と同じで、最初に見出し語があり(これがキー)、それに続いて説明の記述(属性)が並んでいる。マスタを引けば、そのエンティティに関するデータを得ることができる。
「こうしてIT屋さんの単純な世界観が、コンピュータの中のデータの構造に翻訳されたというわけね。なんて平板で単純なのかしら。」