第2節
データ管理
人間は何らかの知的活動をした後、その成果をそのまま保存しておきたいと考える。それは、文章であったり、絵であったり、楽譜であったり、マルチメディアであったりする。そして保存したものは、後から取り出して見たくなる。
人間の脳には無限の情報を蓄積できるような気がするが、必要なときに思い出せない。その癖、呼出しがかかっていないのに、昔の思い出が鮮明に蘇ることがある。ときには、意識の中に無いことまで引き出されてくる。
そこで、必要な情報を他所から引き出してきたり、大事な情報を後で使いやすくするために整理することを考える。コンピュータだって同じこと。きちんと整理しておかなければ、後で分からなくなってしまう。
能率良く仕事をする人は、きっと上手に整理しているに違いない。そこで、コンピュータに効率よくデータを保管し活用する方法について学習することにしよう。
1 データの整理と活用
これまでにコンピュータは大量のデータを処理するのが得意であることを学んできた。処理手順を示すのがアルゴリズムであることも知った。実は、このアルゴリズムの効率はデータの構造に非常に左右されるのである。そこに、データの整理・保管・活用と、その管理がかかわっている。
<表の作成>
第2章で扱った催し企画問題ではいくつかの名簿を作成する必要があった。郵便物を配布するのに必要な情報として、次のようなデータ[1]の種類が考えられる。
ア)相手の住所と郵便番号・所属・相手の氏名
イ)自分の住所と郵便番号・所属・自分の氏名
ウ)差出年月日
エ)郵便料金
以上のデータには二つの性質がある。つまり、不変的なデータ(しかし、永久的ではない)と可変的なデータである。(ア)と(イ)は不変データで、(ウ)と(エ)は郵便物ごとに異なる可変データである。
このうち不変データは何回も使うことがあるので、どのように整理しておいたら扱い易いかを考えることにしよう。(ア)のデータには、
住所
郵便番号
所属
氏名
の四項目がある。このそれぞれをフィールドと呼ぶことにしよう。実は、(イ)のデータも同様のフィールドからなっている。このように一組のフィールドからなるデータの構造をレコードという。この例では、レコードは四つのフィールドから構成されている。
レコードは宛先の数だけあるから、宛先が30件あるとすれば、自分の分も合わせて31のレコード数が必要となる。この31レコードが一つのファイルを構成する。レコードは、メンバーの増減に合わせて、追加したり削除したりすることが可能である。


――――― 演習問題3−1 ――――――――
ワープロを使って、友達や知人の住所をこの表に記入してみよう。また、そこで気づいたことや疑問を述べなさい。個人の住所の場合には所属は不要であるので、その場合は空欄にしよう。
――――――――――――――――――――――
実際に記入したことによって、いくつかの疑問が生まれたことであろう。たとえば、つぎのような疑問を想定しよう。
・ 住所の長さが違うが、自由なのか。
・ 一行に書き切れない場合には二行にまたがってもよいのか。
・ 郵便番号は数値[2]で記入するのか、文字列[3]で記入するのか。
・ 氏名は漢字、ひらがな、カタカナ、アルファベットのどれでもよいか。
・ 名前はいくら長くても良いのか。
・ 特殊記号を含んでもよいのか。
・ 氏と名は分けるのか続けるのか。
この他おそらく、いろいろな疑問を感じた人がいるであろう。それらの疑問は、フィールドの長さ(以後フィールド幅という)に関することと、文字列に関することに分類できるであろう。
このような表は、自由に記入できるように作成することも可能であるが、表が見にくいばかりでなく使い心地もよくない。また、コンピュータが処理するにしても、個々のフィールド幅を確認したり、いろいろな文字列と照合する必要があり、処理時間も大きくなる。
ここでは、予めフィールドごとに、フィールド幅(バイト数[4]で示す)や文字列の型(数字、アルファベット、かな文字、漢字、その他の記号など)を定義しておこう。フィールド幅の標準は決まっている訳ではないので、それぞれの交友範囲で上限を定めればよい。
――――― 演算問題3−2 ――――――――
フィールド幅や文字列を定義して住所録ファイルを完成してみよう。見やすい表ができたであろうか。
――――――――――――――――――――――
――――― 演算問題3−3 ――――――――
住所録を拡張して、電話番号欄を追加してみよう。
――――――――――――――――――――――
――――― 演算問題3−4 ――――――――
さらに、電子メールアドレスを付加するとどうなるか。
――――――――――――――――――――――
<表の利用>
表ができたら、友達の住所を探してみよう。このように、既存の表からデータを探すことをデータ検索という。実際には、いずれか一つのフィールドに注目して検索することが多い。
検索してみると、不便なことや疑問が更にまた生まれるであろう。たとえば、
・ フィールド順がよくないのではないか。
・ たくさんのレコードの中から必要な情報を探し出すのは結構面倒だ。
・ 電話帳のように、レコード数が多くなったらどうするのだろう。
・ 実際には名前以外のキーワードで検索したいこともある。
といった問題が発生するかもしれない。
それならば、このファイルの構造をもっと使いやすい構造に設計し直してみよう。検索しやすさに注目するならば、先ずフィールド順番の入れ替えが考えられる。これは予め決めておくことができるので可能であろう。
名前が五十音順に並ぶようにレコードの順番を入れ替えるとどうなるか。それは便利である。しかし、初めから順番を決めてデータを入力する方がもっと大変ではないか。そこで、考えられるのは、一度入力したレコードの順番をいつでも自由に入れ替えられる仕組みを作ることである。このような仕組みをもった便利なパッケージソフトに、表作成ソフトがある。
しかし、電話帳のように膨大なレコード数を持つ表には、表作成ソフトでは少し負担が大きすぎる。実は、そのような大量データを管理できる仕組みが既に存在している。それはデータベースとよばれている。

2 データベースの仕組み
情報処理はコンピュータが出現する以前から行われていたが、コンピュータの登場によってさらに多くの人に関心を持たれるようになった。それは、コンピュータを使って大量のデータを蓄積したり速く加工したりすることが可能になったからである。
さらに、通信技術とコンピュータ技術の融合が遠隔地の情報処理をも可能にした。コンピュータによる今日の情報処理は、空間と時間の垣根を越えて行われているということができよう。
我々は多くのデータを使って情報処理をしているが、そのデータをどのように保管すると利用効率が良いのであろうか。
<データと情報>
この本には、「データ」と「情報」という言葉がしばしば出現する。これらの言葉はよく混同されるが、この2つの言葉は別のものである。「データ」とは、文字列や数値の形で形式的に表現された事象や概念である。これに対して、「情報」は、データが現す内容であり、事実に基づいた意味を持っている。
基本となるデータには数値や文字列の他、論理値による表現もある。論理値は、「真」または「偽」のいずれかの値で示される。この他、図形や画像、音声や楽音などをディジタル表現したデータもある。これらのデータは、すべて0と1の2進表記がなされているが、情報として再現できるようにするために、その型式やフィールド長など構造を示す情報も記録する。
<ファイルとデータベース>
データをある規則にしたがって保存し、必要に応じて参照できるようにした一つのまとまりをファイルとよび、それぞれのファイルは同じ書式にしたがってデータを記述する。データには型式などいろいろな制約があり、その論理的な構造を記述したものをスキーマとよぶ。
我々が参照の対象とするのは、ファイルを構成するレコードである。レコードを参照することをアクセスという。レコードを構成しているデータ項目はいつも同じ目的で参照される訳ではなく、同じデータがさまざまな目的で利用される。そのため、ファイルの検索や更新などの操作がしやすいように、登録簿を用意してファイルの保管場所がわかるようにしている。
プログラムとデータは相互に強い関係があるが、プログラムごとにデータを備えておくのはあまり効率の良いやりかたではない。それは、データを蓄積する労力からもみても、コンピュータの記憶領域から見ても無駄が多過ぎる。
同じデータがいくつかのプログラムに分散していると、あるデータの修正が必要になったときに、関係する全てのファイルのありかを探してデータを書き換えるという膨大な作業が発生する。また、重複したデータの間で矛盾が起こる危険性もある。
このような欠点を改善するために、いくつものファイルを一つにまとめて、いろいろな利用目的に対応できるようにすることが考えられた。このファイルの集まりをデータベースという。データベースとは、プログラムとは独立に整理したデータを蓄積しておき、条件に合致するデータを検索して抽出できるような仕組みを備えた大きなデータの基地である。
<データベースの特徴>
多目的利用のためには、
・ データと利用するプログラムとは独立であること(データ独立という)
・ データに重複がないこと
・ データベースが安全かつ完全であること
が必要とされる。この特徴を、データベースの独立性、一貫性、安全性・完全性という。このような特徴を維持・管理し、利用者とのインタフェースを備えたシステムをデータベース管理システム(DBMS[5]という)という。また、データベース管理システムとデータの集合を合わせてデータベースシステムという。データベース管理システムには次のような機能が必要とされている。

<データベースの構造>
データベースのデータはいろいろな形式で表現される。その表現は利用者からみて使いやすい構造であること、コンピュータからみれば少ない記憶容量で格納できることが望ましい。そのため、データベースは、外部レベル(利用者の視点)、概念レベル[6](論理的な記述の視点)、内部レベル(コンピュータの視点)の3つの見方に分けて構造化されている。この構造をデータベースの3層構造という(図3−1)。この構造において、外部レベルのモデルは複数あり、それぞれの利用者やプログラムの都合に合わせて自由に作ることができる。実際には、概念レベルで一つのデータベースであっても、内部レベルでは多数のディスクなどに分かれて格納されている。
個々のプログラムに対応する外部レベルのスキーマを外部スキーマ、データ格納に対応する内部レベルの構成を内部スキーマという。またデータベース全体の論理的な記述レベル(概念レベル)に対応するスキーマを概念スキーマとよぶ。このそれぞれのスキーマの設計のよしあしがデータ操作の効率に大きな影響を及ぼす。
データベースのスキーマを記述することをデータ定義といい、データ定義を容易にするためにデータ定義言語[7]が開発されている。

図3−1
データベースの3層構造
<データベースソフトウェア>
データベースシステムは、そもそも大量のデータを蓄積するために考えられたものであるが、今日では、大規模コンピュータで使うものからパソコン上で使えるものまでいろいろある。
これらのデータベースソフトウェアの多くは、次の機能を持っている。
(1)データベースの構造を設計する機能
(2)データを入力する機能
(3)データを編集する機能
(4)データベースに登録する機能
(5)テーブルを複写する機能
(6)データベースに登録されているデータを修正する機能
(7)条件に合致するデータをデータベースから検索する機能
(8)検索したデータを印刷する機能
このような機能を備えたデータベースソフトウェアの中でよく利用されるものに、リレーショナルデータベースがある。図3−2はリレーショナルデータベースソフトウェアを利用したデータベース作成から利用までの流れを示している。
データ構造の設計 ↓ 表の作成 ↓ データベースへの登録 ↓ キーによるデータの分類 ↓ 検索条件を与えたデータの抽出 ↓ 検索情報の活用
図3−2 リレーショナルデータベースの利用
また、一枚のカードで資料を整理する感覚で利用するカード型データベースがある。たとえば、企業ごとの情報や名刺の管理などに使われている(図3−3)。
図3−3 カード型データベースのイメージ
――――― 演習問題3−5 ――――――――――
クラブ活動の案内を、クラブごと一枚のカードで整理することになった。カードのレイアウトを考えてみよう。
また、カードを分類するために、どのような項目を備えておくと便利か。
――――――――――――――――――――――
3 データベースの設計
パソコン用のデータベースソフトウェアを利用する場合でも、データベースの設計は大事な作業である。利用に先立って、まず、データを集めて整理しなければならない。この基本的な作業は、表を作成するときと同じように、データ項目を選定しその構造と型式を決めてレコードを構成する。
さらに、使用目的に対応できるようにデータ項目の相互関係を分析する。データ項目を関連づけたものをデータモデルといい、このモデルを設計することがデータベースを設計する基本作業となる。つまり、データベースの設計とはデータモデルの設計を意味している。代表的なデータモデルとして、階層モデル、ネットワークモデル、関係モデル、オブジェクト指向モデルがある。
パソコン用のデータベースソフトは、対応するデータモデルが予め決まっているため、データ項目の設計ができたところで使用するソフトウェアを選択することになる。
<階層モデル>
データを会社の組織のような階層的な構造で整理したもので、たとえば図4のような事例で示すことができる。この構造は逆さにすると枝をはった木のように見えるために、木構造とも呼ばれている。木の枝が交わらないのと同じように、階層モデルも交わることはない。レコードに親子の関係を持たせるが、子は一つの親しか持てない。処理能力は優れているが、木構造よりも複雑な関係を表現できないのが難点である。
[事例]クラブ活動のモデルを階層構造で表現しよう。

図3−4 階層型データモデルのスキーマ例
クラブ活動には各クラブの名前があり、部員がいて、顧問の先生がいる。部員には部長や副部長などの役職がある。この関係は図3−4のような3階層で表現できる。
「クラブ」、「部員」、「顧問」、「役職」はレコードを示している。枠内はそれぞれのレコードを構成するフィールド(データ項目)である。
――――― 演習問題3−6 ――――――――
卒業生のデータベースを作成したい。データ項目を考えて階層型データモデルで設計しなさい。
――――――――――――――――――――――
――――― 演習問題3−7 ――――――――
レンタル会社の商品管理をデータベースで行いたい。品物を設定してどのようなデータ項目で商品を管理したら良いか考えなさい。
――――――――――――――――――――――
<ネットワークモデル>
階層モデルをより一般化したモデルで、親が複数の子を持つばかりでなく子が複数の親レコードを持つこともできるようになっている。つまり、レコード間で親子を相互に関連づけられる構造モデルである。上下左右に関連する網のような構造をしていることからネットワークモデルと呼ばれている。データ構造が複雑になりすぎるのが難点である。

図3−5 ネットワーク型データモデルのスキーマ例
図3−5のネットワークモデルでは、教員が学年にもクラブにも所属し、生徒は学級にもクラブにも所属しているという関係を示している。このモデルでは、このように子が親を2つ以上もっている。
――――― 演習問題3−8 ――――――――
模擬試験の成績を整理するデータベースを考えるとき、どのようなデータ項目が必要か。さらに、受験に必要な複数大学の情報や他の高校の情報を取り入れるならば、どのようなデータ構造モデルが考えられるか。
――――――――――――――――――――――
<関係モデル>

図3−6 関係データモデルのスキーマ例

図3−7 テーブルの結合
データをいくつかの2次元表の形に整理するという非常に単純な構造をしている。リレーショナルデータモデルともいう。
行をレコード、列を項目と考え、関係(リレーション)という概念を導入してスキーマを定義するので関係モデルと呼んでいる。このモデルに基づいて構成するデータベースをリレーショナルデータベースと呼んでいる。図3−6のように2次元の表を複数作成するのが普通である。たとえば、生徒テーブルと評価テーブルを生徒コードで関係づけると図3−7が得られる。
――――― 演習問題3−9 ――――――――
関係モデルを利用して、学級名簿のデータベースを作成してみよう。具体的なデータ項目を挙げてから表を設計しよう。
――――――――――――――――――――――
<オブジェクト指向モデル>
オブジェクト指向モデルは他の3つのモデルと比べて、まだ体系化が遅れている。現実に見えているもの(オブジェクト)どうしの関係を、直観的にコンピュータ画面上に表現しようという発想から生まれたモデルである。その構造は分かりやすく、あるオブジェクトから別のオブジェクトに作業を依頼し合うという関係で示される。たとえば、パソコンというオブジェクトAがあって、製品番号、製品名、製造工場、利用者という属性値をもっているとする。この属性の表現で他のモデルと違うところは、メソッド[8]とよばれる操作手続きを一体化していることである。また、部品というオブジェクトBがあって、部品名、部品番号、使用機種、製造工場などの属性値とそのメソッドが一体化しているとしよう。オブジェクトAとオブジェクトBの間ではメッセージを通して関連づけが行なわれる。
4 データベースの検索
検索の問題とは、情報をどのように記憶装置内に格納し、その中の必要なデータをどのようにして見つけ出すかということである。
データが少ない場合には、計算方法に合わせてデータを用意することができる。しかし、データが大きくなり、データと処理プログラムが分離されると計算式に合わせてデータを準備することは不可能になる。
その結果、データを作る側は個々の計算にとらわれないでデータを表現し、データを使う側は多くのデータの中から必要なものだけを選び出して使うことになる。そこで、多くのデータから必要なデータを探し出すための方法が必要となる。データの検索とは、特定の内容と一致しているものを見付け出すことである。そのために、使う側は条件を与えてデータベースに問い合わせをする。
問い合わせる条件が一つだけの場合に単純条件、複数の条件を組み合わせて指定する場合に複合条件という。
単純条件の与え方には次のような場合がある。
|
あるデータと等しいものを探す あるデータと等しくないものを探す あるデータより小さいものを探す あるデータより大きいものを探す あるデータ以上のものを探す あるデータ以下のものを探す ある文字列と同じものを探す ある文字列を含んでいるものを探す |
以上を組み合わせたのが複合条件である。
「 AND(かつの意味)」 または 「 OR(またはの意味)」を使って条件を結合して問い合わせる。
たとえば探したい本の名前を図書目録のデータベースで検索するとしよう。その本には「情報」という言葉と「コンピュータ」という言葉が含まれていると考えるときには、情報とコンピュータの両方に関係する書物を検索すればよいから、ANDを使用して、
情報 AND コンピュータ
というキーワードを与えることができる。あるいは「情報」か「コンピュータ」かいずれかの言葉を含む本を探そうとするならば、
情報 OR コンピュータ
で検索すればよい。
このようなデータベースの検索を効率よく行うためには、優れたデータの探索、文字列の照合、データの整理の方法が重要になる。
――――― 演習問題3−10 ―――――――
電車の時刻表のデータベースを作成したい。どのような検索をしたいか考えよう。
――――――――――――――――――――――
<データの探索>
ファイルから必要なレコードを探し出す処理をデータの探索という。すなわち、レコードのあるフィールドとその値を指定して、それに合致するデータやその格納場所を求める処理である。たとえば、住所録ファイルから、住所がA市で年令が17歳のレコードを探す処理が考えられる。
[例題3−1]大きさの順[9]に整列されているデータのファイルXがあり、その中にPというデータがあるか探したい。
昇順に並んでいるデータが、Xの1番目からn番目に、X(1)、X(2)、..、X(n)という名前で格納されているとしよう。X(1)から順にPと比較しながら同じものがあるか探す方法がある。逐次探索または順探索とよばれる方法である。
k番目のデータがPと同じであればX(k)が探し当てたデータであり、PがX(k)より大きくてX(k+1)より小さい場合には、データを探し当てられなかったことになる。
データが非常に少ない場合にはこの方法が単純で使いやすい。しかし、データが多い場合には非常に時間がかかる。そこで、データを2つのグループに分けてPがどちらのグループに入っているかを探しながら、目標の範囲を狭めていく方法がある。
n個のデータのうち、中央のデータX(k) [10]とPを比較して、それより小さい場合には下の方のグループを更に探索し、大きい場合には上の方のグループを探索するという手順を繰り返す。X(k)がPと一致すれば探索は成功である。この探索方法を二分探索と呼ぶ。図3−8は二分探索によるチェックの過程を示している。図中の�,六呂瓩烹个犯羈咾垢覦銘屬任△蝓△修梁臂�によって次に探す位置を左右の一方に決める。�△鉢�の数字は、何回目に比較する位置であるかを示している。
目的のものが見つかる前に探索できる範囲がなくなってしまえば、探索は失敗である。
――――― 演習問題3−11 ――――――――
1,5,8,13,29,38,39,43,61,78,80,92,93,99
のデータ列がある。二分検索法を使って、P=50、P=92 をそれぞれ探索してみよう。何回探索を繰り返すか。
――――――――――――――――――――――― 
図3−8 二分探索法
<文字列の照合>
文字の長い並びの中から、ある指定したパターンを探すという処理は、データベースやワープロの探索でよく使われる。
[例題3−2]n個の文字が並んだテキストTXT[1・・n]の中に、m個の文字が並んだパターンPTN[1・・m]が含まれているとき、その位置を探す。ただし、テキストに同じパターンが複数ある場合には、その最初に現れる位置を示すことにする。
テキストTXT
|
1 |
2 |
|
k |
|
k+m-1 |
n |
|
|
P |
Q |
SAC・ ・ |
A |
BCDXY |
Z |
・ |
|
|
パターン PTN
|
1 |
|
m |
|
A |
BCDXY |
Z |
図3−9 文字列の照合
テキストTXTのk番目からm文字がパターンPTNと合致したとすると、図3−9のような関係が得られる。このとき、kが求める位置となる。
ここでは、最も単純な照合方法を説明しよう。TXTの1番目の文字とPTNの1番目の文字から照合を始める。TXT(1)とPTN(1)が同じ場合には次の桁すなわちTXT(2)とPTN(2)を照合する。もし、照合に失敗したらPTNを一つ右にシフトして、TXT(2)とPTN(1)を比較する。以下この手順を繰返し、PTNの全桁同じであったら、PTN(1)に対応するTXTの位置が求めるものである。
この方法を単純照合法という。
――――― 演習問題3−12 ―――――――
テキストの文字列
PROJECTS AND PROGRAMS,PROGRAMMING LANGUAGE GUIDE,
において、PROGRAM という文字列のパターンを照合しなさい。ただし、スペースも一文字とする。照合に成功するまで文字の比較は何回行われたか。
――――――――――――――――――――――
<データの整列>
データの探索の例では、データが大きさの順に並んでいた。このようにデータを一定のルールにしたがって並べ替える処理をデータの整列(ソート)という。
[例題3−3]一組8枚のカードに異なる数字が書いてあり、次のように並べてある。このカードを昇順に並べ替えてみよう。
9,15,3,53,6,21,30,60
このようにデータが少ない場合には、容易に最小のカードを探すことができる。一番小さいカードを選んで、一番目の位置のカードと入れ替える。次に、二番目に小さいカードを選んで、二番目の位置のカードと入れ替える。この手順を繰り返すとカードは次のように置きかわっていく。
|
始めの状態 |
9 |
15 |
3 |
53 |
6 |
21 |
30 |
60 |
|
|
3 |
15 |
9 |
53 |
6 |
21 |
30 |
60 |
|
|
3 |
6 |
9 |
53 |
15 |
21 |
30 |
60 |
|
|
3 |
6 |
9 |
15 |
53 |
21 |
30 |
60 |
|
|
3 |
6 |
9 |
15 |
21 |
53 |
30 |
60 |
|
|
3 |
6 |
9 |
15 |
21 |
30 |
53 |
60 |
以上のように、このデータでは5回の入れ替えで整列ができた。このようにデータを選択して順番の位置に入れ替えていく方法を単純選択法という。
隣り合ったデータを順次比較して大小の順序が逆転している場合に位置を入れ替えるバブルソートという方法もある。例題3−3を、この方法で解決してみよう。この方法も、比較を何回か繰り返す。ここでは、入れ替えを行ったところを矢印で示すことにする。最後に入れ替えを行った所に印をつけておくと、次回はその先を比較しなくてもよい。ここでは、[]を付けることにしよう。
2回目のパス 3回目のパス


4回目のパスは入れ替えがないので、これで整列は終了する。
――――― 演習問題3−13 ―――――――
データ列
40,88,35,70,55,15,10,25,95,60
を単純選択法とバブルソート法で整列してみよう。
――――――――――――――――――――――
[1] 情報とデータ構造の定義は違う。情報処理ハンドブックによれば、「情報とは認知や思考の対象となる実体についての認識内容」で、「データとは情報を記述、表現するときの最小単位(あるいは、その集合)」である。本書は、この定義に従っている。
[2] 数値とは四則演算ができる数字である。よく使用される数値に整数値と実数値がある。郵便番号に演算処理を施したい場合には数値として扱うが、小数点つきの数ではないので整数値である。
[3] 文字列は、数字、アルファベット、かな文字、漢字、その他の記号からなる列である。数字だけからなる文字列は、一般にコードとして使用される。郵便番号はコードであるから文字列として扱うことが多い。
[4] 2進数の8けた分を1バイトと数える。
[5] Data Base Management System の略である。
[6] 概念レベルのモデルの設計には、実体関係図(2章参照)などが利用される。
[7] たとえば、問い合わせ/操作言語などがよく知られている。
[8] オブジェクトに付随する操作をメソッドという。
[9] 小さい方から大きい方へ並べる昇順と逆に並べる降順がある。
[10] nが奇数の場合には、k=(n+1)/2 であり、nが偶数の場合には、k=n/2 とすればよい。