データベースシステム論
2016年度 前期 水曜 1・2時限 情24教室
担当:横山昌平
データベースシステム論 第2回2015 [ ] 1p.
講義担当者
• 情報学部 情報科学科 准教授 横山昌平
• 研究室
• Web : http://lab.yokoyama.ac/
• Facebook :http://facebook.com/lab.yokoyama.ac/
• 居室
• 情報学部1号館6階 J1612室
• オフィスアワー
• 講義終了後1時間
※なるべく講義時間中に発言・質問してください
データベースシステム論 第一回2016 [ ] 2p.
講義計画
• 関係データベースの歴史と基本概念
• SQLの基礎と応用(演習を含めつつ)
• データベースの設計と構成
• SQL問い合わせ処理とそれを支える技術
• 関係データモデル以外のデータベース
データベースシステム論 第一回2016 [ ] 3p.
※現時点での予定です。進捗に応じて変更します。
27Apr.
20Apr.
13Apr.
25May
18May
11May
1June
8June
29June
22June
20July
13July
6July
27July
教科書は買いましたか?
• 森北出版
• 石川博
• 情報工学レクチャーシリーズ
• 『データベース』
データベースシステム論 第2回2015 [ ] 4p.
データベースシステム論
第2回 データベースの歴史と今
データベースシステム論 第2回2015 [ ] 5p.
本日の内容
• データベースの技術的な講義に入る前段階
• データベース登場の背景
• データベースの歴史
• 現在のデータベースの使われ方(Webを例に)
データベースシステム論 第2回2015 [ ] 6p.
次回から、データベース技術を詳細に学んでいきま
すが、その前に、データベースがなぜ登場して、なぜ
使われているのかの歴史を学びましょう。
また、Webアプリケーション等でどのようにデータ
ベースが使われているのかを学び「意外に身近な存在
なんだな」という事を理解した上で、来週以降の技術
的な話に進みましょう。
コンピュータとは何か?
• “How”の視点 (何をどうやって実現するのか)
• 命令に従って動く機械
• クイックソートで昇順に並べ替え
• プログラミング言語を機械語にコンパイル
• 3Dグラフィックの高度な座標計算
• “What”の視点 (それが何であるのか)
• データを入力し保存し処理し表示する機械
• 膨大なデータから必要な情報を瞬時に提示
• 3Dで再現された精細な地球
• ソースコードでさえ単なる文字列データ
データベースシステム論 第2回2015 [ ] 7p.
この考え方がまさにデータベースシステムの根底の考え方
情報化社会はデータが主役
• スマートフォン
• 機種 →新しいのが出たら変更したい!
• データ→機種変しても残しておきたい!
• 検索エンジン
• ググれカス!→そこに求めるデータがあるはず
• 皆さんのノートPC
• ハードウェア→壊れても保障で直してもらえる
• データ→壊れたら最後・・・
• デジタルカメラ
• どんどん写真(データ)が貯まっていく・・・
データベースシステム論 第2回2015 [ ] 8p.
データの管理がとても重要
• 身の回りの重要なデータ
• 電話帳
• メール履歴
• 貴方の成績データ
• 預金残高
• リスク
• データがなくなるリスク
• ハードディスクが壊れました!
• データが知らない内に書き換わるリスク
• 誰かが書きかえた?それとも酔っぱらった俺?
• データが矛盾するリスク
• ノートPCとスマホのスケジュール帳で集合時間が違う
データベースシステム論 第2回2015 [ ] 9p.
例1.銀行での送金
• 「母ちゃん、俺だよ!金くれよ!」の例
データベースシステム論 第2回2015 [ ] 10p.
口座B 口座A銀行システム
-$100-
+$100-
例2.家族の口座
• 「飲み代無いっ!」
データベースシステム論 第2回2015 [ ] 11p.
ATM1 ATM2銀行システム
OK!
$100-
残高チェック
出金
残高チェック
OK!
&「生活費おろさなきゃ!」
想像してごらん
• 貴方が銀行のシステムを開発しているところを…
データベースシステム論 第2回2015 [ ] 12p.
怖いでしょ?
データベースの必要性
• 全ての開発・実装案件にデータ処理はつきもの
• 毎回「安全・完全な実装」をするのはコスト高
• ただどんなアプリにとってもリスクは共通
• データ処理を頑健にこなすシステムの重要性
• アプリから独立して存在している事に意義がある
• それがデータベースシステム
• データ処理を安全・完全に行う為のシステム
データベースシステム論 第2回2015 [ ] 13p.
この講義は「これまでのプログラミングに加えてさらに難
しい事を勉強する」のではなく、「今後、皆さんの実装を
楽にする為の知識を得る」事を目指しています。
データモデルの変遷
• 教科書を読んでみよう。
• P.6~P.9
• 1.4.1 ネットワーク型モデル
• 1.4.2 階層型モデル
• 1.4.3 関係データモデル
データベースシステム論 第2回2015 [ ] 14p.
歴史
• ネットワーク型データモデル(1960年代)
データベースシステム論 第2回2015 [ ] 15p.
データベースの歴史は、現実の我々の身の回りにある
情報をどのようにコンピュータ上に再現するかの挑戦
といえる。我々が当たり前のように使っている表形式
のデータが登場する前に様々な試みがあった
ワイン
バローロ 1万円
人
山田 50歳
人
佐藤 40歳
買う 売る
歴史
• 階層型データモデル(1960年代後半)
データベースシステム論 第2回2015 [ ] 16p.
データベースの歴史は、現実の我々の身の回りにある
情報をどのようにコンピュータ上に再現するかの挑戦
といえる。我々が当たり前のように使っている表形式
のデータが登場する前に様々な試みがあった
人
佐藤 部長
人
山田 課長
人
渡辺 課長
歴史
• 関係データモデル(1970年代)
データベースシステム論 第2回2015 [ ] 17p.
データベースの歴史は、現実の我々の身の回りにある
情報をどのようにコンピュータ上に再現するかの挑戦
といえる。我々が当たり前のように使っている表形式
のデータが登場する前に様々な試みがあった
役職 名前
部長 佐藤
課長 山田
課長 渡辺
支店長 マイケル
部下 上司
山田 佐藤
渡辺 佐藤
マイケル 佐藤
なぜ関係データベースか
• ネットワーク型・階層型データベース
• Edgar F. Codd(1923-2003)
• データはハードウェアから独立して格納されるべき
• 行と列のみで構成される表として格納されるべき
• 非手続き型言語を使ってデータにアクセスすべき
データベースシステム論 第2回2015 [ ] 18p.
ナビゲーション(レコード間の繋がり)構造に詳しくないと、
クエリ(検索等命令)が書けない点が問題。
Codd, Edgar F. "A relational model of data for large shared data banks."Pioneers and Their
Contributions to Software Engineering. Springer Berlin Heidelberg, 2001. 61-98.
これらそれぞれの意味は次回説明しますが、ここで覚えて
おいて欲しいのは、関係データモデルは単純簡潔だという
事です。それが普及し、また今でも使われている一因です。
関係データベースの歴史
• 最初期
• Oracle Version 1 (1978)
• 未発売
• IBM System38 (1979)
• OSレベルでサポート
データベースシステム論 第2回2015 [ ] 19p.
Oracle V1が動作したPDP-11System38
関係データベースのシェア
• Oracle Database - 70%
• Microsoft SQL Server - 68%
• MySQL (Oracle Corporation) - 50%
• IBM DB2 - 39%
• IBM Informix - 18%
• SAP Sybase Adaptive Server Enterprise?- 15%
• SAP Sybase IQ - 14%
• Teradata - 11%
※Gartner 2008年調べ
データベースシステム論 第2回2015 [ ] 20p.
データベース製品の変遷
• Wikimediaより
• http://upload.wikimedia.org/wikipedia/commons/a/
a2/RDBMS_timeline-2.svg
データベースシステム論 第2回2015 [ ] 21p.
関係データベースの今
データベースシステム論 第2回2015 [ ] 22p.
行政・交通・金融などの基幹系のシステムのみならず、Webアプ
リケーションやスマホのアプリケーションにも使われている。
RDBとWEB
用語
• 3層クライアントサーバーシステム
• 第1層:プレゼンテーション層
• 第2層:ロジック層(アプリケーション層)
• 第3層:データ層(データベース層)
• 例:Web3層クライアントサーバーシステム
• 第1層:Webブラウザ / HTML
• 第2層:Webサーバ / PHP, Perl, Ruby, Python…
• 第3層:データベースサーバ / SQL
データベースシステム論 第2回2015 [ ] 23p.
用語(Web技術)
• HTML (HyperText Markup Language)
• Webページの『みてくれ』を記述する言語
• HTTP (HyperText Transfer Protocol)
• Webページを取り寄せたりする通信の仕様
• URL (Uniform Resource Locator)
• インターネット上の住所表現
• CGI (Common Gateway Interface)
• Webサーバ上でプログラムを動かす仕組み
• Server-side Scripting
• Webサーバ上でプログラムを動かす仕組みpert2
• Client –side Scripting
• Webブラウザ上でプログラムを動かす仕組み
データベースシステム論 第2回2015 [ ] 24p.
古き良きWeb
• 静的なHTMLファイルを取り寄せる仕組み
データベースシステム論 第2回2015 [ ] 25p.
サーバブラウザ
Internet
http://inf.shizuoka.ac.jp/index.html のファイルください!
OK~ はいどうぞ!
inf.shizuoka.ac.jp
HTTP Request
HTTP Response
ちょっと発展したWeb
• 動的なコンテンツを取り寄せる仕組み
データベースシステム論 第2回2015 [ ] 26p.
サーバブラウザ
Internet
http://inf.shizuoka.ac.jp/index.php のファイルください!
OK~ はいどうぞ!
HTTP Request
HTTP Response
inf.shizuoka.ac.jp
何が違う - 静的と動的
静的コンテンツ
• HTMLファイル
→クライアントに転送
動的コンテンツ
• PHPプログラム
→コードが実行
データベースシステム論 第2回2015 [ ] 27p.
<html>
<body>
<h1>現在時刻</h1>
何時か分かりませんorz
</body>
</html>
<html>
<body>
<h1>現在時刻</h1>
<?php
print(date(“r”));
?>
</body>
</html>
クライアント送信時にコードが実行
される為、現在時間を取得する関数
を使って現在時刻を表示できる。
HTMLは単なるテキストファイルで
あり、メール添付と同じく、ファイ
ルがクライアントに送信されるだけ。
三層構成のWeb
• データベースを利用したWebアプリ
データベースシステム論 第2回2015 [ ] 28p.
DBサーバブラウザ Webサーバ
三層構成のWeb
• データベースを利用したWebアプリ
データベースシステム論 第2回2015 [ ] 29p.
DBサーバブラウザ Webサーバ
<?php
$conn = pg_pconnect(オプション);
$result = pg_query($conn,
"SELECT name,mail FROM students");
print “<table>”;
while ($row = pg_fetch_row($result)) {
print “<tr>”;
print ”<td>$row[‘name’]</td>";
print “<td>$row[‘mail’]</td>”;
print "</tr>¥n";
}
print “</table>”;
?>
三層構成のWeb
• データベースを利用したWebアプリ
データベースシステム論 第2回2015 [ ] 30p.
DBサーバブラウザ Webサーバ
<?php
$conn = pg_pconnect(オプション);
$result = pg_query($conn,
"SELECT name,mail FROM students");
print “<table>”;
while ($row = pg_fetch_row($result)) {
print “<tr>”;
print ”<td>$row[‘name’]</td>";
print “<td>$row[‘mail’]</td>”;
print "</tr>¥n";
}
print “</table>”;
?>
<table>
<tr>
<td>山田太郎</td>
<td>yamada@inf.jp</td>
</tr>
<tr>
<td>佐藤次郎</td>
<td>sato@inf.jp</td>
</tr>
</table>
出
力
三層構成のWeb
• データベースを利用したWebアプリ
データベースシステム論 第2回2015 [ ] 31p.
DBサーバブラウザ Webサーバ
<?php
$conn = pg_pconnect(オプション);
$result = pg_query($conn,
"SELECT name,mail FROM students");
print “<table>”;
while ($row = pg_fetch_row($result)) {
print “<tr>”;
print ”<td>$row[‘name’]</td>";
print “<td>$row[‘mail’]</td>”;
print "</tr>¥n";
}
print “</table>”;
?>
<table>
<tr>
<td>山田太郎</td>
<td>yamada@inf.jp</td>
</tr>
<tr>
<td>佐藤次郎</td>
<td>sato@inf.jp</td>
</tr>
</table>
出
力
山田太郎 yamada@inf.jp
佐藤次郎 sato@inf.jp表
示
ユーザ入力の処理
• ユーザの入力に従って問い合わせたいよね?
データベースシステム論 第2回2015 [ ] 32p.
DBサーバブラウザ Webサーバ
山田太郎 yamada@inf.jp
佐藤次郎 sato@inf.jp
山田太郎 yamada@inf.jp
苗字が「山田」のデータだけ欲しい!
SELECT name, mail FROM student WHERE name LIKE ‘山田%’;
ユーザ入力の処理
• SQLはともかく、PHP(サーバ側)はどう書く?
データベースシステム論 第2回2015 [ ] 33p.
検索 山田
<form method=“GET”
action=“sql.php”>
<input type=“text”
name=“N”/>
<input
type=“submit”/>
</form>
OK
http://inf.shizuoka.ac.jp/sql.php?N=山田
<?php
print $_GET[“N”];
//山田を出力
?>
移
動
<?php
print $_GET[“N”];
//山田を出力
?>
ユーザ入力の処理
• SQLはともかく、PHP(サーバ側)はどう書く?
データベースシステム論 第2回2015 [ ] 34p.
検索 山田
<form method=“GET”
action=“sql.php”>
<input type=“text”
name=“N”/>
<input
type=“submit”/>
</form>
OK
http://inf.shizuoka.ac.jp/sql.php?N=山田
移
動
<?php
$conn = pg_pconnect(オプション);
$result = pg_query($conn,
"SELECT name,mail FROM students");
$result = pg_query($conn,
“SELECT name, mail FROM student
WHERE name LIKE ‘”.$_GET[“N”].”%’;”)
print “<table>”;
while ($row = pg_fetch_row($result)) {
print “<tr>”;
print ”<td>$row[‘name’]</td>";
print “<td>$row[‘mail’]</td>”;
print "</tr>¥n";
}
print “</table>”;
?>
山田太郎 yamada@inf.jp
佐藤次郎 sato@inf.jp
表
示
山田太郎 yamada@inf.jp
WebアプリとDBの関係
• Webアプリには3層のソースコードが含まれる
• HTML/JavaScript: ブラウザ上で動作するスクリプト
• PHP: Webサーバ上で動作するスクリプト
• SQL: DBサーバ上で動作するスクリプト
• エッセンス
• プログラムの出力がそのままブラウザの入力へ
• SQLはプログラム上は文字列として格納される
• HTMLフォームの入力は変数にバインドされる
• 文字列連結によりSQLを動的に作り出す
• DBの結果をテーブル等で整形して出力する
• どうですか?なんとなくイメージ湧きました?
データベースシステム論 第2回2015 [ ] 35p.
次回予告
第3回 関係データモデルと関係代数
データベースシステム論 第2回2015 [ ] 36p.
第3回 関係データモデルと関係代数
• データモデルの独立
• データベースの利用者
• 関係データモデル
• リレーション
• 関係代数
• 予習
• 対応箇所:第2章
• 関連個所:第1章
データベースシステム論 第2回2015 [ ] 37p.

データベースシステム論02 - データベースの歴史と今