【第1回】入門・木構造を越えて


 みなさんは図書館に行って図書を探す時、どうされるでしょうか。最近は図書館に行くとパソコンが置いてあって、蔵書の検索ができるようになっています。かつては分類・配列された図書カード(書誌情報を記載したカード)が引き出しに入った、茶箪笥のようなものが並んでいたのですが、そういった光景を見ることはなくなりました。


図1 図書カードのサンプル

 図書カードは、日本十進分類(Nippon Decimal Classification:NDC)コード順に配列されているものと、著者名順に配列されているものの、少なくともその両方が用意されていて、このやり方で目指す図書にたどり着くことができるようになっていました。NDCは、類目‐綱目‐要目の木構造になっていますし、著者名も辞書式配列で整理されていたので、これも読みの最初のn文字のブロックの下にn+1文字まで考えたブロックがぶら下がるという意味では木構造です。
 木構造で何かを整理するというやりかたは、世の中至る所で見られます。ひとつには目指すものをある属性に従って並べておくと属性から目指すものを捜し出すことができるからなのですが、「目指すもの」と「属性」の関係が整理できていないと、困った問題を引き起こします。
 図書の場合ですと、「図書」という「目指すもの」には「NDCコード」や「著者名」などの「属性」がありますが、NDCコードは図書には必ず1つ定まる(はず)なのに対し、著者名に関しては記載がない図書もあります(たとえば雑誌や百科事典)。ということは、著者名順に並べた図書カードでは見つからない図書があるということです。
 また図書には著者が何人もいることがあります。この場合どの著者からでも図書にたどり着けるようにするためには、本来ならば著者ひとりひとりに図書カードを作って、それぞれを著者名順に配列しておく必要があります。(実際は図書カードでそこまでしている例は少ないと思います。パソコンで蔵書検索ができるようになって進歩した一つの点はここだと思います。)これ以外にもいろいろあるので思いつくままに並べてみると、

  • 図書には著者名という属性があることがある
  • 図書には必ずNDCコードという属性がある
  • NDCコードは(主に)図書の分野を表す
  • 著者は複数の図書を書くことがある
  • 図書には複数の著者がいることがある
  • 一人の著者が複数の分野の図書を書くことがある
などなど

 NDCコードと著者名という図書の2つの属性についてだけでもこのようなたくさんの「ルール」がありますが、図書はこれ以外にも発行年月日とか、ISBNコードとか、出版社名とか、シリーズ名(例えば××文庫、○○選書、□□全集)とか、翻訳者などなどさまざまな属性(書誌情報)があるので、「ルール」を列挙することすら困難になります。データモデルは、このようなデータに関する「ルール」を整合が取れる形にまとめあげたもので、データディクショナリやER図を中心としたいくつかの表や図式で表現されます。


図2 ER図のサンプル(図書館の蔵書システムとして適切かどうかは別にして)

 データディクショナリはデータの定義や、データの表現形式(文字・数値の区分や、数値データの場合は単位など)、データのとりうる値(ドメイン-例えば発行年月日の「月」ならば1から12の自然数)、データの出典や加工履歴(データ・リネージ等と言われることがあります)、データへのアクセス権限等が表の形式で記入されています。ER図はある「目指すもの」に関するひと固まりのデータ(タプル)を一意に識別するためのキー(主キー)、タプルとタプルの関係(参照キー)等を、特有の図式(IDEF1XやIE記法などいくつかの「流派」がありますがこの連載ではERwin の採用している表記法でもあるIDEF1Xを使います)で表現します。これらのデータモデルを読むと、問題としている領域(たとえば図書)でデータがどのような「ルール」に従って存在しているかを知ることができます。 ここまで、「ルール」という言葉を無造作に使いました。確かに「(複数の著者がある場合は)最初に出てきた著者名に基づいて図書カードを配列する」という風に人為的に決めた「ルール」があるならば、もちろんそれを知ることは大切なことです。ただ、このような人為的な「ルール」をその場の都合で作っていくと、目先で多少の省力化ができる場合もありますが、長い目で見るとろくな結果になりません。「著者が本を書くという行為」「著者によって書かれた本という存在」から自ずと出てくる著者と本の関係がそのままデータのあり方に反映されている「べき」なのです。そういう意味ではデータモデルが表すものは、「ルール」というより「法則」と呼ぶほうがぴったりきます。
 この連載は「ユーザーのための」と銘打っていますので、次回からデータモデルを作るひとではなく、データモデルを読むひとの観点でポイントになる話題をいくつか取り上げていきたいと思います。

ページの先頭へもどる