データ相互の関連づけや整理に関しての、計算機を使った技術のこと。
共有を意図して計算機内に蓄積された情報の集まりのこと。
情報の整理や管理をするソフトウェアのこと。 データは共有され、かつ統合化されている。
共有を意図して計算機内に蓄積された情報の集まりのこと。
データの一貫性 (Consistency): データが複数ある場合、データを 1 元的に管理し、 それぞれのソフトウェアがアクセスするように作ること。
論理表現: プログラムのデータ形式を統一するインタフェース
データのプログラムからの独立 (プログラムのデータからの独立): ファイルシステムとは異なり、データの変更はプログラムの変更を伴わない。
共有データの同時アクセスへの対処が必要。
ビュー (View): 各プログラムにおいて、必要なデータのみ取り出すこと
間違いを未然に防いだり、機密保持にも役立つ。
データベースの構成は次の通り。
データの論理表現をユーザやソフトウェアに公開すること。
データベースシステムが外部に対して見せている仕様のこと。
ユーザやソフトウェアは、 論理表現にそってデータ操作を行う。
クエリ (query): 検索言語
操作要求はデータの論理的な関係のみを示し、 ハードウェアによらない。
データベースは、情報システムを使って知識の検索をすることである。 この講義では文字だけの情報のみに限定するが、 実際は音声、画像の検索も視野に入れたデータベースの研究がなされ、 検索エンジンのベータ版などで最先端の試みを見ることができる。
データの論理表現は、 データベースシステムの外部に見せる仕様のことである。
マンマシンインタフェースのよさと、 業務運用において必要なデータを収集検索できる効率のよさで、 データベースの論理表現のよさが決まってくる。
データ収集において、情報を限定して必要な情報のみ取り出すことをモデル化と 呼ぶ。モデル化は論理表現法により 3 つに分けることができる。
モデルに基づいて抽象化を行う際の記述と、データとの関係についてまとめ る必要がある。
例えば、データが "氏名", "曜日", "時限", "時期", "科目名", "教室" で あることがスキーマである。インスタンスはそれに対して、 "西村まどか", "月", "4", "前期", "公益自由研究", "102" である。
スキーマをどのように記述するか、には 3 種類の階層がある。
外部レベル (View) | 外部スキーマ | 抽象化するデー タの枠組みを規定 |
概念レベル | 概念スキーマ | データの論理表 現であるデータモデルに基づいたデータの抽象化 |
内部レベル | 内部スキーマ | OS やファイル 管理システムとのインタフェース |
データを木構造にしたデータモデル。会社の組織図など。 子のノードが多数の親ノードに属す場合に、ポインタを用いて、 物理親と論理親を持つように構成できるが、 親が多くなる模型には適さない。
矩形をレコード、楕円形をセットとする。 子レコードは多数の親レコードを持つことができる。 データベースが集中管理されている場合に使われてきた。
データが複雑にならぬよう、2 次元表で全てのデータを扱うものである。
名前 | 曜日 | 時限 | 時期 | 講義名 | 教室 |
西村まどか | 月 | 4 | 前期 | 公益自由研究 | 102 |
西村まどか | 月 | 5 | 通年 | 専門演習I | 102 |
西村まどか | 月 | 6 | 通年 | 専門演習II | 102 |
西村まどか | 火 | 1 | 前期 | 基礎プログラミングI | 101 |
西村まどか | 火 | 2 | 前期 | 基礎プログラミングI | 101 |
: | : | : | : | : | : |
学籍番号 | 科目 |
ta05001 | 公益自由概論 |
ta05001 | 公益自由研究 |
ta05001 | 情報リテラシーI |
ta05001 | 情報リテラシーII |
ta05001 | 基礎プログラミングI |
ta05001 | 基礎プログラミングII |
: | : |
2 つのモデルと大きく異なるのは関係代数に基づくものであるこ と。データ操作言語は、個別に操作を行わずに、集合を操作するものから成り立 つ。
Ruby でデータベースを使った Web インタフェースを作る。 CGI を作成したページで、前回の課題では入力画面を作成した。
( 入力を促す Web ページ / ソース / 結果表示ページ )
データベースの登録の準備をしよう。 データベースと同じ条件にするために、 データベースの属性分だけ増やして完成させよう。
また、データベースの登録準備として、Ruby 言語を通して、 データベースにアクセスする方法を学ぼう。 rubydb.rb
まずは SELECT コマンドで試そう。 つぎにINSERT INTO コマンドに変更し、 実行して、エラーが出なかったら、ほんとうにデータベースに登録されたか どうか調べておこう。
ta05001=> select * from practice;
name | wday | hr | sem | sub | cls
------------+------+----+------+----------------------+-----
西村まどか | 月 | 4 | 前期 | 公益自由研究 | 102
西村まどか | 月 | 5 | 通年 | 専門演習I | 102
西村まどか | 月 | 6 | 前期 | 専門演習II | 102
西村まどか | 火 | 1 | 前期 | 基礎プログラミングIB | 101
まずはこれをプログラムで実行するよう、準備する。
require 'pg' # Ruby-DBI を使用する pg = PGconn.new(:dbname=>'ta05001', :user=>'postgres',:port=>5432) # データベースにアクセス sql = 'select * from position;' result = pg.exec(sql) # SQL を実行 result.each{|i| p i} # 実行結果の表示 result.clear # 実行結果をクリア pg.close # データベース接続の解除
Ruby は gem を使用してモジュールをインストールする方法が、 一般的となってきた。
gem install pg -- --with=dbi,dbd_pg --with-pg-config=/usr/local/pgsql/bin
でオプションをつけながら pgsql の在処を示しつつインストール。Ruby と似た interperter 型言語の Python は モジュールインストールには easy_install を使用する。
CGI の結果を出力するときに、プログラムの場合は、 以下のような方法が使える。
#!/usr/bin/env ruby -Ke
print <<__EOF__
Content-type: text/plain;charset=EUC-jp
<html>
<head>
<title>日本語のページを Ruby で出力してみる</title>
</head>
<body>
<p>日本語の文章を EUC で出力</p>
</body>
</html>
__EOF__
-Ks の場合は Shift_JIS、-Ku の場合は UTF-8 に charset を変更する。
pg.exec (SQL 実行文)
の、データの部分を
対話的に入力
する準備を行う。SQL 実行文を Ruby 変数 sql に代入するとき、
'
は \'
に置き換える。
また #{Ruby 変数}
を使って、
CGI 変数を代入して得られたRuby 変数を
Ruby の実行文で出力していく。
結果が更新されたか調べておこう。
ta05001=> select * from practice;
name | wday | hr | sem | sub | cls
------------+------+----+------+----------------------+-----
西村まどか | 月 | 4 | 前期 | 公益自由研究 | 102
西村まどか | 月 | 5 | 通年 | 専門演習I | 102
西村まどか | 月 | 6 | 前期 | 専門演習II | 102
西村まどか | 火 | 1 | 前期 | 基礎プログラミングIB | 101
西村まどか | 火 | 2 | 前期 | 基礎プログラミングIC | 101
(5 rows)
それでは両者を統合して、CGI スクリプトから受けた CGI 変数を Ruby 変数に代入し、データベースに登録しよう。 プログラム と 支援ページ をみてみよう。
CGI で登録されたかどうか確認しておこう。
ta05001=> select * from practice;
name | wday | hr | sem | sub | cls
------------+------+----+------+----------------------+-----
西村まどか | 月 | 4 | 前期 | 公益自由研究 | 102
西村まどか | 月 | 5 | 通年 | 専門演習I | 102
西村まどか | 月 | 6 | 前期 | 専門演習II | 102
西村まどか | 火 | 1 | 前期 | 基礎プログラミングIB | 101
西村まどか | 火 | 2 | 前期 | 基礎プログラミングIC | 101
西村まどか | 水 | 1 | 前期 | 情報交換概論 | 102
(6 rows)
PostgresQL は 8.3 以降 XML 形式をサポートするようになった。 読みやすい 文献 もあるので、必要に応じて調べるとよいだろう。
HTML5 では XML との統合を摸索している。
あるデータの情報だけを取り出すプログラム プログラム を作ろう。
登録が何度もあるところなどをチェックすることができる。 もう少し SQL を勉強すると、WHERE のところで、不等号などで、 しぼりこむことができる。工夫してみよう。
検索結果 = データベース.query(SQL 言語) 検索結果.each do |内部変数| 表示方法 end
tuple は 配列でしまれており、 属性は key となるような Hash に格納されている。
限界値を超えたデータを確認できるようにしよう。