「ITって、何?」 第10問 データの世界には文法ってあるの?(2/2)
「・・・こうしてIT屋さんの単純な世界観が、コンピュータの中のデータの構造に翻訳されたというわけね。なんて平板で単純なのかしら。」
--君はそう思うかもしれないけれど、アリストテレスの認識論でも、事物(エンティティ)は属性と量と場所と時間と入出力(正確には能動と受動)と関係で決まる、とされていた。つまり、これが西洋的な事実の認識なんだ。
「いきなり西洋哲学!? とんでもない所に救援願いを出したわね。」
--そんなことはない。ある意味、ITってのは西洋哲学の子孫なんだ。すごくその影響を受けている。あまり日本人の技術者は気がついていないけどね。
「・・なら、『関係』の方はどうなったの?」
--それはこれから説明する。関係というのはね、あるフィールドの値が選択肢で規定されるときに、それを別のマスタ・テーブルへの参照として表現する事だ。
「え? もう一度いって。」
--あのね。さっきの表でいくと、商品の仕入先の名前と電話番号というフィールドがあっただろ? でもね、これはよく考えてみると、これは商品の属性ではなく、取引先の属性だ。
「たしかにそうね」
--だから、本当はこんなフィールドを商品マスタの中に抱えているのは論理的におかしい、ってことになる。商品の属性は、どこの会社から仕入れるかということだけに留めるべきだ。そして、仕入先の属性データは、「仕入先」というエンティティのために別のマスタを用意して、そこに格納すべきだろう。たとえば、こんな:
仕入先コード 仕入先名 仕入先電話番号
----------------------
1001 昭和食品(株) 03-3456-1234
1002 (株)三田製菓 03-7654-9000
・・・ ・・・ ・・・
このテーブルにもキー属性が必要だから、「仕入先コード」という背番号をつくることにした。これは各社に対してそれぞれ一つの番号を振りあてている。
「それで商品のマスタの方はどうするの?」
--商品マスタには、「仕入先名称」や「電話番号」のかわりに、単に「仕入先コード」のみを記録する事にする。つまり、こんな風に:
商品名 JANコード 単価 仕入先コード
--------------------------
チョコレート 4912345670001 192 1001
キャラメル 4906543218046 75 1002
メロンパン 4900223360097 120 1001
・・・ ・・・ ・・ ・・
これをみるとわかるとおり、『商品マスタ』と『仕入先マスタ』の二つのエンティティをあらわすテーブルが、「仕入先コード」という共通のフィールドをキーにして“関係づけられて”いる。
別の言い方をすると、『仕入先マスタ』というテーブルは一種のメニューとして定義されていて、商品の仕入先は、その『仕入先マスタ』からの選択肢になっている。複数の商品が同じ仕入先コードを持つことができるから、ここには多対一の関係が成立していることになる。これが、データベースにおける関係の表現なのさ。
「うーん・・なんだか複雑ね。わかったようなわからないような・・」
--そりゃね、本当だったら何週間もかけて講義するようなデータベースのスキーマの話を3分で話しているんだから、分かりにくいかもしれない。そこはかんべんしてもらわないと。
とにかく、このようにして、複数のテーブルが関係をもって組あわさって作るものが『データベース』なのです。ちょうど、部屋と部屋が廊下やドアでつながり組合わさって建物ができるように、ね。
「センテンス同士が接続詞でつながりあって文章ができるようなものかしら。」
--そうともいえるかな。とにかく、ここでちょっとまとめておこう。
データの最小単位とは、有限の選択肢の中から一つを選んだものを指す。これは(選択肢のメニューさえ決めれば)数字で表現できる。選択肢で定義できないようなものは、それが満たすべき規則を決める。これがフィールドで、いわば単語にあたる。
レコードとは、フィールドが決められた順序で決められた数だけ並んだものをさす。データの並び方を決める約束事をデータの規則と呼ぶ。
対等なレコードが複数並んだものを、テーブルという。レコードを識別するためのフィールドを、キーと呼ぶ。キーの値はそれぞれのレコードごとに必ず異なっていなければいけない。
エンティティとその属性を表現するテーブルのことをマスタと呼んだりする。マスタは、選択肢のメニューをあらわす辞書としても機能する。
あるテーブルが、別のテーブルのキーとなるフィールドを共有することによって、テーブル間の関係が生じる。
データベースとは、複数のテーブルが関係を持って成立するものをいう。
「ふう。これがデータの世界の文法規則の全貌というわけね?」
--そのごく概略のありさまです。まあ、細かな点をいろいろはしょっているから厳密には不正確なところもあるけど、理解してもらう助けにはなるだろう。見慣れない用語も多くて申し訳ない。消化不良になりそうかな?
「・・そうね、飲み込むには時間がかかるかも。
消化といえば、それにしても、なんだかお腹がすいてこない?」
--そうだな、ぼくもずっとしゃべりどおしで、のどがカラカラだ。もうそろそろインターチェンジだから、パーキングエリアのレストランでも探そうか。ちょっと休憩して何か飲みたいな。
「賛成。わたしも、お腹がぺこぺこよ。」