データベース入門
なぜデータベースを学ぶか
データベース(DB)は、ソフトウェア工学の主要分野である。社会で使われている大規模な情報システムのほとんどにはデータベースが組込まれている。たとえば、
- 銀行のATMシステム
- 電子マネー(おサイフケータイ)と自動改札システム
- カーナビとETCシステム
- 大学の学生、教員、科目などの管理システム
- 鉄道や高速道路の運行管理システム
など、枚挙に暇がない。もし仮に、ある日突然データベースが利用できなくなったら、情報システムをインフラとしている現代社会は1日たりとも正常に機能しないだろう。
だから、システム開発や管理を専門にしない人も含めて、現代人なら誰でも、データベースの基本的な概念だけは理解しておく必要がある。だが、データベース管理システム(DBMS)の詳細や、ビジネスレベルでの運用方法まで学ぶことは、この講座だけでは手に余る。たとえばみなさんが、就職した企業でデータベース管理者を担当するには、少なくとも1年間程度の学習を経た上で、ある程度の期間、実際にデータベースを構築したり、使ってみなければならないだろう。世間にはデータベース技術だけで飯を食っている専門家だって大勢いるのだ。
そこで、大学生の皆さんには、
- データベースの基本的な考え方を理解する。
- パーソナルデータベース管理システムMS Accessを使って、自分のテーマを解決するためのデータベースを自由に設計・構築できる。
ことを、最初の目標として奨めたい。つまり自分の知的生産の4フェーズの内、情報の整理・保存フェーズの重要技術(キーテクノロジー)として、データベースを使いこなせるレベルを目指すことにしよう。学生や社会人にとって、知的生産で活用する情報のほとんどはテキスト情報だろうから、最初はテキストデータベースを中心に扱うことになる。
データベースとは
コンピュータ(情報処理機械)と、同時に生まれたソフトウェアの歴史は、1940年代から約80年におよぶ。データベース(DB)という考え方は、その途中、1960年代に誕生し、しだいに発展して、現在では重要な社会インフラの地位を占めていることはすでに述べた。
その背景には、コンピュータに対する社会のニーズが変化したことがある。黎明期のコンピュータは、主として軍事や科学技術の数値計算用に利用されていた。ビジネス分野でいち早く取り入れたのも金融・証券など数字を扱う業種が主で、この時期には統一的なデータ管理がさほど必須ではなかった。
だが、1960年前後になると、金融以外の一般企業でも、経理・人事・顧客サービスなどのさまざまな分野に利用されるようになって、いくつかの問題点が見えてきた。この時代の情報システムではまだ、ハードウェアとアプリケーション・ソフト(以下アプリ)が共同で作業を実行しており、データベースはおろか、いまでは必需品である基本ソフト(OS)さえ明確には存在しなかった。各アプリには、それぞれが処理すべきデータが伴うが、それらは磁気テープや磁気ディスクなどに記録されたファイルである。データベース以前のシステムにおける、このアプリとデータの関係を図1に示す。
図1:データベース以前のアプリとデータの関係
各業務を実行するアプリは、処理対象のデータを個別にかかえこんでいる。アプリの種類が増えると、処理データは重複するが、アプリ間でデータは共有できない。たとえば図中の学生データがどちらかのアプリにより更新されると、2つのデータ間に内容のズレが生ずる。これを不整合という。ズレること自体も困るが、どちらかの内容が現実と合わなくなるのは、もっと困る※1。
1 かつて消えた年金問題が表面化したが、あれはデータと現実の不整合の問題と捉えられる。当時は国民にマイナンバーというIDがなかったのが根本的原因である。大学が学生番号をつけずに学生を管理しようとする場合を考えてみればよい。
各データにアクセスするプログラムは、データの種類によらず共通部分が多いが、それも各アプリで毎回プログラミングしなければならず、開発の無駄が大きい。
これらの問題点が、情報システムの大規模化に伴って顕在化したため、ソフトウェア工学的な解決策が求められるようになったのである。
そこで、アプリが処理する対象データを、アプリとは独立に管理したら、というアイデアが生まれた。具体的には、以下のような要求である。
- 1つの処理データを、複数のアプリから、しかも同時に利用できるようにする。
- ハードウェア障害やソフトウェアのバグ(エラー)が発生したとき、データが破壊されることを予防したい。
- データ操作や管理のためのプログラムを、アプリ側でくり返し実装する無駄を省きたい。
こうした要求への回答として発明されたのが、データベース管理システム(DBMS)である。データベース(DB)自体と混同しないように、ここで定義しておこう。
- データベース(DB)
- 特定の目的をもったデータの集まり自体。たとえば学生データベース。
- データベース管理システム(DBMS)
- データベースを操作・管理するためのソフトウェア。たとえばMS AccessやMS SQLServer、Oracleなど。
データベースとデータベース管理システムにより、アプリとデータの関係は図2のように、可用性の高い、頑強(ロバスト)な形態に進化した。今あるような、さまざまな大規模情報システムを作るための基礎が整ったのである。
図2:データベース登場後のアプリとデータの関係
データモデル
このようにして、1960年代には、大規模システムの構築にデータベースが必須であることが理解されるようになったが、さまざまなアプリから使いやすい、整理・保存・アクセスに適したデータ管理の形式を求めて、試行錯誤が繰り返された。この(汎用の)形式をデータモデルと言い、すでに使われなくなったもの(1と2)を含め、図3のような4種類のモデルが存在する。
図3:データベース管理システムのためのさまざまなデータモデル
各モデルについて、簡単に解説する。
- 階層モデル
- 節点と枝からなる階層構造(木構造)によってデータを組織化するモデル。現在ではデータベースよりも、Windowsも含め、基本ソフトのファイルシステムとして広く使われている。
- ネットワークモデル
- 節点と枝からなるネットワーク構造によってデータを組織化するモデル。インターネットやハイパーテキスト(Web)のデータ構造である。現在ではデータベースに使われていない。
- リレーショナルモデル
- リレーションシップによって相互に関連づけられた表(Table)構造によってデータを組織化するモデル。
- オブジェクトモデル
- (自動車やパソコン、人間といった)実世界のモノとその属性に対応づけてデータを組織化するモデル。オブジェクト指向開発(OOD)というソフトウェア開発のパラダイムに沿って、1990年代に登場した。
現在は、リレーショナルモデルに基づくデータベース管理システム(RDBMS)が、搭載システム数ベースで9割を占める主流である。だが、RDBでは表現が難しい複雑なデータ(地理情報システム※2、気象情報システム、リアルタイムのシミュレーションなど)を格納するには、オブジェクトデータベース(ODB)が用いられる。
この講座では、リレーショナルデータベース(RDB)について学ぶ。この方式のデータベース管理システム(RDBMS)は、IBMの研究者エドガー・フランク・コッドにより1970年までに理論構築され、1980年代には全盛期を迎えた。ビジネスで広く使われている一覧表形式のデータと親和性が高いこと、数学的な理論(表演算)がしっかり構築されているため、RDBMSの性能向上がしやすい※3ことなどが普及の理由である。
2 図4に、地理情報システムの例を示す。こうした複雑な情報は、すべて一覧表で表現しにくいが、オブジェクトデータベースなら無理なく表現できる。
3 こうした数学的基盤があれば、表の操作をが数式のように簡約化したり、表を高速に操作するハードウェア(データベース・マシン)を設計できる。
図4: 地理情報システムの1例
この講座で使うMS Accessは、パーソナルRDBMSと称している。パーソナルというのは、1人のユーザが、1台のパソコンから、1人で操作することを前提にして開発されているということであり、銀行のATMシステムなどで使われる高度はRDBMSには備わっている機能(トランザクション管理など)がいくつか省かれているが、データベースの入門用としてには大変適したアプリである。兄貴分にMS SQL Serverという本格的RDBMSがいるのも、ステップアップを楽にしてくれる。もちろん、自分や仲間内で使うデータベース・システムを構築するには、十分な機能を備えている(この講座の卒業生には、部活の事務にAccessを使うようになった人が多い。
データベース管理システム(DBMS)の基本機能
DBMSには通常、以下の6つの機能がある。始めの4項目が、パーソナルRDBMSであるAccessにも備わっている機能。最後の2項目は、省略された機能だ。
- 永続的(persistent)記憶
- アプリの実行/終了に関わりなく、データの内容を保ちつづける。MS WordやMS Excelのように、文書に保存するという概念はなく、最新の内容が即時に反映される。
- データ操作
- データベースのテーブル(表)に対する、挿入・更新・削除などの操作を実行する。
- クエリ(問合せ)
- データの内容に関するアプリからの問合せを受け付け、データベースにアクセスして応答する。回答もテーブル形式で表示される(ダイナセット)。問合せには、SQLというプログラム言語(クエリランゲージ)を使う。
- 2次記憶管理
- データを格納しているデータベースファイルを管理する。
- 障害回復
- ハードウェア障害やソフトウェアのエラー(バグ)が発生し、データ内容が壊れたとき、トラブル発生前のデータを復元できる。Accessにも、あるにはあるが、DBMSの操作に統合されていない印象。
- 並列処理制御(トランザクション制御)
- 複数のアプリから、同じデータベースに同時にアクセスした場合にも、DB内のデータに不整合が生じないようにする。
ここに挙げたのは基本機能のみである。現実のRDBMSでは、この他に他システムとの連携とか、ネットワーク上に分散したデータベースの管理など、追加機能をもつ場合が多い。
データベースの例
Accessを用いて作成された個人用データベースの例として、図5に京大型カードデータベースを示す。これは、B6版の紙カード(京大型カード※4)に書かれた、知的生産のための素材メモを、RDB形式に移植したものである。
4 発想支援ツールの定番である京大型カードについては、梅棹忠夫著『知的生産の技術』岩波新書を参照。
図5: 京大型カードデータベース
図に挙げたのはAccessのフォームというデータベースオブジェクトである。画面上のUI(ユーザインターフェース)として、元のB6版カードに似せてデザインしてある。表示されている各データ(ID、日付、キーワード、タイトル、本文など)は京大型カードテーブルフィールドに格納されている。
各自、サンプルデータベースを開いて、テーブルとフォームの構造を見てみよう。