学習書●[情報処理]

データベース
database
△
< |
>
http://www.infonet.co.jp/apt/March/syllabus/Literacies/database.html
データベース
関係
関係表
対
格
関係演算
射影
選出
結合
残り
交わり
結び
択一的結び
関係型データベース
全体一致
部分一致
誤差問題
検索
SQL
正規化
ハイパテキスト
データベース
きみたちが作ったり使ったりする情報の多くは、一つ一つが独立していて、それぞれ個別の用途に使うだけだ。こんな場合は、それぞれの情報を、別々のファイルの中に保存しておけばいい。しかし、以下のようなタイプの情報は、ばらばらのファイルを作っただけでは、十分に活用することができない。
・大量に集められている
・内容が正しくて新しくないといけない
・複数の用途に使えないといけない
けれども、以下のような条件が満たされていれば、
データベース(database)という特別な構造で情報を記録し、管理していくことによって解決できる。
・全体の情報はいくつもの部品の情報の集合に分解できる
・それぞれの部品はそんなに大きくない
・それぞれの部品は何種類かの共通の構造をもっている
データベースを管理していくには、その作業を支援する専用の情報システムが必要になる。このためのシステムを
データベース管理システム(DBMS<database management system)という。データベース管理システムは、データベースの構築、更新、検査などの機能を備えている。
関係モデル
データベースを作ったり使ったりするためには、情報が共通の構造をもった単位の集合として整理できるようになっていなければならない。その枠組みの考え方の一つに、
関係モデル(relational model)がある。
命題のパタンを
関係(relation)という。たとえば、[水戸花子さんは筑波太郎さんの上司です]という命題と[日立正さんは鹿島進さんの上司です]という命題は、[○○さんは○○さんの上司です]という共通のパタンをもっている。
関係モデルに基づくデータベースの設計では、情報を、いくつかの関係を共有する命題の集合に分解する。巨大に見える情報でも、せいぜい何十種類か(運がよければ1種類だけ)の関係に分類できることが多い。
同じ一つの種類の関係を共有する命題を書き出して表にしたものを
関係表(relation table。例:▽図)という。
△
関係表の例
関係表の行(左右に並んだ組み)の内容を
対(tuple)といい、紙に書いた表や、データベース管理システムが準備してくれるファイルの中でそれが書き込まれる場所を
レコード(record)という。列(上下に並んだ組み)の内容を
格(role)といい、それが書き込まれる場所を
フィールド(field)という。上の表には五つの対と二つの格が含まれている。
関係モデルに基づいたデータベースの内容は、原則として、このような表の、そのまた集合として記録されている。
関係演算
数と数とから加算や減算によって別の数が算出できるように、命題からほかの命題を導出する演算を
関係演算(relational algebra)という。関係演算には、▽表のようなものがある。
|
結び
union
|
指定した二つの関係のうちの少なくともどっちかには属している対だけを選び出す
|
|
択一的結び
exclusive union
|
指定した二つの関係のうちのどっちか片方だけに属している対だけを選び出す
|
|
交わり
intersection
|
指定した二つの関係のどっちにも属している対だけを選び出す
|
|
残り
contraversal
|
(データベースを全体として)その関係に属している対だけを除く
|
○
|
射影
projection
|
指定した関係から指定した格だけ残してほかの格を消す
|
○
|
選出
selection
|
指定した関係から指定した格の値が指定した値と同じになっている対だけ残してほかの対を消す
|
○
|
結合
join
|
指定した二つの関係をもとにして、それぞれの指定した格の値が互いに同じになっている対の組み合わせをつなぎ合わせる
|
|
積
product
|
指定した二つの関係の対と対との全部の組み合わせをつなぎ合わせる
|
|
商
division
|
指定した関係のうち、指定した格を除いてはほかは同じで指定した格については全部の可能な値のが揃っている対の組みを見つけ、それだけ指定の格は消して残し、ほかの対は消す
|
△
関係演算
これらのうち、特に、射影(projection)、選出(selection)、結合(join)の三つの演算(○印)が可能になっているデータベースを
関係型データベース(relational database)という。これらの三つの演算が使えると、素材さえほかの関係として記録してあれば、データベースには含まれていない関係でも(もちろんその関係の表の内容も)新しく作り出せる。だから、もとは単純なデータベースでも、何倍にも活かして使うことができる。
ほかの演算は、なければ困るが特に意識して使うものではない。
実用面では、記録されている値しか使えないと、選出や最終の結果としては十分な情報が得られない。だから、多くのデータベースは、これらの演算のほかに、数、文字、判断に関するふつうの(値から値を作る)演算をして、その結果を入れた新しい格を追加する(表から表を作る)演算も備えている。
これらの演算を実行する機能は、きちんとしたデータベース管理システムならもともと備えているから、データベースを作る人が自分で作る必要はない。
全体一致 部分一致
選出は格の値についての条件がともなってはじめて意味をもつ。この条件は
格の名前 = 格の値
例:
性別 = 男
氏名 = "オードリー-ヘップバーン"
のような形式で指定する。このような条件を
全体一致(equation)という。
性別のように、値が単純で分解できない場合はこれでもいいが、データベースが扱う情報の多くはテキスト(氏名のように短いものも含めて)、音、写真、映画のような、一部だけ(最初の10文字とか2×2に割った左上の隅とか)を取り出すことができる複合体なので、全体ではなくて一部がどうなっているかに基づいて選出をさせたいこともある。この条件は
格の名前 = .* 格の値 .*
例:
氏名 = .*"ヘップバーン"
のような形式(何でもいいということを書き表わすために".*"と書いてみたが、実際の書き方はシステムによって違うだろう)で指定する。このような条件を
部分一致(inclusion)という。
部分一致による選出が速く実行できるようにするためには、あらかじめ、
索引(index)を作っておく必要がある。本格的なデータベースを作るためには、データベース管理システムを使って、もとの情報のファイルからデータベースファイルを作り直さなければならないが、索引ファイルはこの時に作られる。索引ファイルは、もとの情報のファイルと同じかその数倍の大きさになる。
誤差問題
ある種類の情報を探し出したくて選出を行なうと、いらない情報がほしかった情報に混ざって出て来たり、逆にデータベースには含まれているはずなのにほしかった情報が出て来なかったりすることがある。いらないのに出て来てしまった情報を
第1種の誤差(error of the 1st kind)といい、ほしいのに出て来なかった情報を
第2種の誤差(error of the 2nd kind)という。
一般的に言って、第1種の誤差を減らそうとすると(条件を厳しくするなど)第2種の誤差が増え、逆に第2種の誤差を減らそうとすると第1種の誤差が増えてしまう。これを
誤差問題という。
検索
データベースから必要な情報を集めてくることを
検索(retrieval)という。関係型データベースでは、たいていの検索はいくつもの関係表から関係演算によって新しい関係表を作り出すことで実現できる。
関係演算によって新しい関係を記述するための標準的な形式の一つに
SQL(<Sequel)がある。多くのデータベース管理システムは、SQLで指定した関係を算出して、それを表や情報を埋め込んだ書式(たとえば所書き)などの形式で表示できるようになっている。
ビュー
いくつかの関係は、ほかの命題の表から、関係演算によって導出できる。だから、データベースを構成する関係がたくさんあるように見える場合でも、それをいちいち、別々の表として記録しておかなくても、代わりに導出のための演算を記録すればいい。このような、直接には記録されていない関係を
ビュー(view)という。ビューは、節約になるだけではなくて、むしろ、重複している部分の内容が表によって食い違ってしまうのを防ぐのに役立っている。
整合化
関係型データベースは、データベースに収録されている一つの対が、一つのものごと(たとえば学生、教員、科目)かつながり(受講、取得、担当)を表わすように設計すると、分かりやすいものにできる。
この結果、現実とデータベースとは▽表のようにして対応させることができるようになる。
・実物と情報(データベースに収録されているレコード)とは1対1に対応する
・現実で何かが新しく生まれたら、データベースではレコードを1件追加する
・現実で何かが消えたら、データベースではレコードを1件削除する
現実と対応するように作られているデータベースに対して、両方の状態を調べて、食い違いが見つかったらそれを揃え直す(たいていはデータベースの方を合せる)ことを整合化(updating)という。データベースがうまく作られてさえいれば、それをとりまくどんな業務も、データベースの整合化として一まとめにして考えることが可能になる。
開閉
現実とデータベースとを1対1に対応させたくても、現実が極端に大きくて、しかも全部の情報がとりあえずは必要でないなら、例外として、実物があっても、情報はない、という状態があってもかまわない。このように作られたデータベースを開いた(open)データベースといい、実物の分だけ情報もきちんと揃っているデータベースを閉じた(closed)データベースという。
一意化
整合化がきちんと考えられているデータベースでは、一つの関係に属しているすべての対は現実のものごとに対応した名前を持っている。この名前は、いくつか(たいていは一つだけ)の格の値(の組合せ)として自分の中に含まれている。名前を値としてもつ格(たとえば氏名とか番号)をキー(key)という。
何かの原因で、キーの値が同じ対が二つ以上できてしまった場合に、その二つを統合して正常な。
第1正規化
何も考えないで関係表を作ると、同じ情報が重複して記録されてしまったり、書き直しを繰り返していくうちに、いつのまにか必要な情報が消えてしまったりする。こんな問題を起こすいくつかのよくない関係表(の組合せ)が知られている。それらを直すことをデータベースの
正規化(normalization)という。
たとえば、筑波花子さんが朝日新聞と読売新聞を取っていることを▽図のような対で記録してしまうと、あとで問題が起こる。
顧客
|
購読紙
|
...
|
...
|
筑波花子
|
朝日新聞 読売新聞
|
...
|
...
|
△
第1正規形違反
これだと、筑波花子さんが読売新聞の購読を止めた時に問題が起こる。止めたからと言ってこの対を消してしまうと、朝日新聞まで止めてしまったことになるからだ。
この情報は、▽図のように記録しないといけない。
顧客
|
購読紙
|
...
|
...
|
筑波花子
|
朝日新聞
|
筑波花子
|
読売新聞
|
...
|
...
|
△
第1正規形
これなら、筑波花子さんが朝日新聞を取っている情報は消えない。もちろん、初めの方式でも、レコードを消す代わりにフィールドの内容を書き変えれば問題はないだろうが、書き変える(特にこの場合は)よりも消してすむならその方が分かりやすい。
設計の途中でこんな変更を行なうことを第1正規化(1st normalization)といい、その結果としてできる、フィールドやフィールドの集合の中での繰り返しが取り除かれた表を第1正規形(1st normal form)という。
第3正規化
さらに、筑波花子さんが竹園に住んでいて朝日新聞と読売新聞を取っていることを▽図のような対で記録してしまうと、第1正規形にはなっているけれど、やはり問題が起こる。
顧客
|
住所
|
購読紙
|
...
|
...
|
...
|
筑波花子
|
竹園
|
朝日新聞
|
筑波花子
|
竹園
|
読売新聞
|
...
|
...
|
...
|
△
第3正規形違反
これだと、筑波花子さんが竹園から並木に引っ越した時に、2か所を書き直さなければならない。もしかすると、朝日新聞のレコードだけ書き直してしまって、そのために食い違いが起こるかもしれないし、それを防ぐためには、まず、データベースの中から(いくつあるか分からない)筑波花子さんのレコードをみんな見つけ出さなければならない。そもそも、繰り返しが必要になるから、作業が分かりにくくなる。
また、筑波花子さんが朝日新聞も読売新聞も止めてしまうと、せっかく筑波花子さんが竹園に住んでいることが分かっているのに、その情報までなくしてしまう。
この情報は、▽図のように、二つの関係に分けて記録しないといけない。
顧客
|
購読紙
|
...
|
...
|
筑波花子
|
朝日新聞
|
筑波花子
|
読売新聞
|
...
|
...
|
顧客
|
住所
|
...
|
...
|
筑波花子
|
竹園
|
...
|
...
|
△
第3正規形
設計の途中でこんな変更を行なうことを第3正規化(3rd normalization)といい、その結果としてできる、フィールドやフィールドの集合の中での繰り返しが取り除かれた表を第3正規形(3rd normal form)という。
ハイパテキスト
本の中に書かれている文章は、文字、単語、文、章などの要素が一列に並んだものとして全体が構成されている。このような文章を
リニアテキスト(=linear、線形。▽図)という。リニアなテキストは、先頭から末尾まで順に読んでいくように書かれている。
□---□---...---□
・
リニア構造
リニアテキストを、細かく分けられているけれどもそれぞれは完結した内容をもったいくつもの節に分解したものを、ランダムテキスト(random=関係のない。▽図)という。これなら節と節との組合せは読み手の自由にできるから、書き手が考えていなかった新しい意味を読み出すことも可能になる。しかし逆に、初めから分かっている局所的な関係も失われてしまう。