第9回 IT屋さんは実際の物事をどうデータに翻訳するの?
--エンティティと関係による認識の話-- (2002/3/19 発信)
しばらくの間、彼女は黙っていた。
--・・・どうした? もう質問はおしまいかい?
「ねえ。」
--うん?
「いま、何問目だっけ?」
--え? 知らない。7問目か8問目じゃなかった?
「さっきからあなたに聞いた話を今ずっと想い出していたのよ。なんだか話の筋道がふらふらしていて、核心に近づいていないって気がするわ。ITって何か、という核心に。」
--そうかなあ。ぼくとしては一貫してデータの扱い方の話をしてきたつもりだけれどなあ。
「でも最初はたしか、専門家と一般人とのギャップの話だったでしょ? そのあと情報とデータの違いの話になったけれど、情報技術って言葉の由来になって、それから『セミIT』の話に移っちゃったの。そして半角と全角の文字の違いから、やっとバーコードのデータの話に戻ったかと思うと、またデータベース・マーケティングとやらに話が振れるのよね。そして紙と鉛筆のITの話。20の扉のうち、これで8つを開いた訳だけれど、まるでパッチワークみたいで一貫性がないわ。」
--あのねえ。ぼくは君の質問に順番に答えているだけでしょうが。そしたらパッチワークになるのはしかたが無いじゃない。たとえパッチワークでも、しだいにITの全体像がわかってもらえれば、それで目的達成だと思うけど。
「私はそうじゃなくて、順を追って中核に迫りたいの。でもあなたの答えがのらりくらりとしてちっとも中心に向かっているという感じがしなくて。もしもあなたの言うようによ、ITがデータの取り扱いの技術なら、そこに何か中心的なプリンシプルがあるはずじゃない?」
--ITはデータと情報の間のサイクルをつくる技術だよ。情報を定型化してデータの型にはめるのは、その半分だけれど、まあ、中心になる原理だってあるわな。事実をどういう風にモデル化してデータに翻訳するか、だけれど。
「翻訳なの? だったらわたしの仕事の領分ね」
--翻訳ってのはまあ一種のたとえで、実際には定型化とかモデル化とか呼ぶ方が正しいだろうな。翻訳とちがって答えは一種類じゃない。直訳も意訳もある。やる人のスキルにも大きく依存する。
「あら、それって翻訳そのものじゃない。翻訳者の技量で良しあしが決まるし、直訳も意訳もある。あなたは翻訳を、まるで文章を一対一で機械的に置きかえていく作業みたいに誤解していない?」
--うーん、だとしたら、たしかに翻訳の一種ともいえるかなあ。
「もしそうだとしたら、その中心には何か方法論があるはずだわ。あと、文法とか辞書みたいなものも。IT屋さんは実際の物事をどうやってデータに翻訳するの? データの世界には文法はあるの?」
--もちろんあるよ。そりゃ、データは機械のためのものだから、人間の使う言語の文法とはよほどちがった、むしろ数学的なものだけれど、とにかく決めごとはね。
「じゃ、それを真っ先に教えてくれなくちゃ」
--あのね、ぼくはITの世界の水先案内をして上げている訳だよ。外国を案内するのに、その国の気候風土や雰囲気をまず説明せずに、文法規則や法律を真っ先に教えるやつがどこにいるんだ?
「わかったわ。でももう、そのタイミングでしょ。」
--かなわないなあ、君には。
いいよ。まずね、事実の世界をどう認識するか、からいこう。
「お、本格的。」
--余計な合いの手はイリマセン。まずね、対象世界は事物、すなわちエンティティの集合であると考える。そして、そのエンティティの集合間になりたつ関係=リレーションを規定する事で事実の構造をとらえる。
「ちょ、ちょっと待ってよ。Entity? Relation? いきなり話が抽象的じゃない?」
--だって認識論だもの。我慢してもらって、先にいきます。各エンティティは複数の属性を持つ。その属性のどれか一つ(ないしは複数の属性の組み合せ)によって、個々のエンティティは同定される。
「・・先生。何か例を示してくれる?」
--急にしおらしくなったじゃない。いいよ、さっきのコンビニの例でいきましょう。店で売られている商品を対象に考える。エンティティとは商品だ。
「ふむふむ。」
--商品はさまざまな属性を持つ。名前、価格、仕入先、バーコードでついている背番号(これをJANコードという)、計量の単位(個数とかKgとか)、値引きの対象かどうか、食料品なら賞味期限、etc.,etc…
「あ、そういうのが属性ね、なるほろ。」
--この中で、どれがエンティティの識別に使える属性か分かるかい?
「う、急に反撃に転じてきたな。そんなの簡単じゃない。バーコードの背番号でしょう?」
--正解です。逆のいい方をすると、他の属性は、複数のエンティティで重複して同じ値になる可能性がある。この、決して重複しない識別用の属性をキー属性と呼ぶ。
「で、関係ってのは?」
--ここに、もう一つのエンティティを考えると関係が生じて来る。
たとえばね、仕入先というエンティティを考える。仕入先は、会社名、所在地、電話番号、FAX番号、支払勘定口座、担当者名等の属性をたぶんもっているだろう。
ところで、個別の商品は必ず一つの仕入先をもっているはずだ。
「まあ、それはそうよね。」
--このとき、商品と仕入先というエンティティの集合の間に、1対1の関係が成立している、と考える。
「あ、なんだ、関係ってただそれだけのことなの? わたしもっと複雑なものを想像していたわ。」
--男女関係とかじゃないからね。1対1か、1対多か、多対多か、基本的にはそれだけのドライな関係です。
「1対1はわかったけれど、1対多って何よ、その一夫多妻みたいなの?」
--これはね、たとえば同じ商品でも、複数の卸し問屋から仕入れるケースもあるかもしれないじゃないか。コンビニでどうかは知らないけれど、ふつうあり得るケースだわな。
「そうね。」
--その場合、一つの商品というエンティティにたいして、複数の仕入先というエンティティがむすびつく。これを1対多の関係という。
「じゃあ、多対多は?」
--えーとね・・たとえば、こうしよう。店舗というエンティティを考える。同じコンビニのチェーンに所属する店舗だ。ところで、チェーンストアの本部から見た場合、どの店舗でどの商品を売っているかを把握する必要がある。ね? ところで、商品の品揃えは店舗ごとにちがう。
「え? ちがうの?」
--ちがうよ。たとえば、住宅地にあるのか、都会のオフィス街にあるのか、近隣商店街にあるのかで、売れ筋の商品がちがうからね。それと、同じ立地でも、店舗の規模面積によって品数が変わる。広ければそれだけ数多くの商品をおくことができる。これをうまく考えるのがチェーン本部の仕事だ。
ところで、店舗というエンティティと、商品というエンティティは多対多の関係になる。なぜかというと、一つの商品が複数の店舗で販売されることもあるし、また一つの店舗は複数の商品をおくからだ。これが多対多の関係だ。行ってみれば乱交関係かな。・・あ痛っ!
「品の悪いたとえを出さないでちょうだい!」
--ぶつなよなあ、運転中の男を。
まあとにかく、基本的な関係はこの3種類だ。あとは、1対多だけれど相手は最大5種類までとか、現実的な制約がいろいろつく場合とか、あるいはis-a関係だpart-of関係だ等々とあるけれど、まあいってみればバリエーションなので省きます。
これで事実世界の認識の説明を終わる。
「ええーっ! ちょっと待ってよ。IT屋さんの世界観って、そんなに単純なものだったの? エンティティだかなんだか、事物が並列にならんで、それに属性がぶら下がって、それに数の関係がなりたつ、っていう、たったそれだけ?」
--そうだよ。えー、まあね、事物が並列でなく、親子関係を持って属性を継承したりする、クラスとインスタンス云々の方法論もあるんだけれど、ここではあえて単純な古典的な方を説明しとります。
「そんなんで世界が説明できるわけ無いじゃない。単純すぎるもの。」
--目的はデータと情報の処理だからね。なにも世界を変革するための哲学をやってるわけじゃない。
「でも、ITは世界を変えているんでしょ?」
--そりゃま、そのとおりで、そこがまあ面白いところだけれど。
「そんな単純な世界観で世界を動かそうとするんだもの、あちこちひずみが出るのも当たり前だわ!」
--まあ待ちなよ。別にどこか世間の隅っこにIT屋が集まってだよ、この世を動かす陰謀を練っているわけじゃないんだから。たとえば複式簿記だってさ、考えてもみなよ、あれで世界のかなりの部分は動いているわけだけれど、ずいぶん単純な割り切りでできている。あれはイタリア人の発明らしいけれど、だからといって彼らがこの世界を乗っ取っているわけじゃないよね。
「あの単純さにも、わたしは異議があるんですけれど。」
--その話は会計士の先生とでもしてくれたまえ。今はITの話。
「でも、じゃあ、たとえば『過程』はどうなの? モノだけでプロセスがなかったら世界観として半端だわ。」
--いい質問だ。プロセスとは、データモデルの世界の上では、インプットのデータを得てアウトプットのデータに変換し出力する仕組みを意味する。つまりね、ここまでの説明はまだ事物の認識論であって、この先がまだ半分ある。それが、データの世界でのモデル化の手法だ。いまのエンティティ同士の関係を、データの集合の中でどう表現するか、それが問題だ。
「そうよね。データへの翻訳と文法の話だったわよね。それで、データの文法というのはそもそもどうなっているの?」
(c) 2002, Tomoichi Sato
(この話の登場人物はすべて架空のものです)