Transcript 7月21日分
情報通信システム(12)
http://www10.plala.or.jp/katofmly/chiba-u/
2015年7月21日 火曜日
午後4時10分~5時40分
NTT-IT Corp.
加藤 洋一
千葉大学 12- 2
Web+データベース
• 本日は、情報システムの最近の主流である、Web+データ
ベースで成り立っているシステムを概観してみましょう。
– インターネット上での飛行機の予約、購入、オークション、など全て
Web+データベース(DB)で出来ています。
– 将来仕事でこのようなシステムに携わる人も何人かはいるでしょう。
要求
クライアント
結果
SQL
IPネットワーク
DBサーバー
データの管理
Webブラウザーで表示
文書形式は「HTML」
プロトコルはHTTP
HTTPヘッダー
要求の解釈と処理、 コンテント(通常はHTML)
HTMLの生成
Webサーバー
クライアント
SQL:データベースからデータを取り出したり格納したりするための標準的なコマンド
千葉大学 12- 3
リレーショナルデータベース
• データベースは、2次元のテーブルでデータを管理し
ます。
列(Column)
テーブル定義
行(Row)
パーツ名
マザーボードA型
定価
19,800
卸価格
11,000
CPU 840型
メモリー512MB
24,800
7,900
14,000
3,900
千葉大学 12- 4
リレーショナルデータベース
• データベースとはテーブル(表)の集まりです。
学科一覧表
学科名
電子機械
定員
45
現在人員
41
画像情報
都市環境
40
20
39
18
教員一覧表
教員名
所属学科
役職
千葉太郎
電子機械
教授
弥生花子
都市環境
準教授
松戸次郎
都市環境
講師
千葉大学 12- 5
主キー
• 行を特定するためのカラム(項目)
– 何とかIDのように、ユニークな番号を行ごとに振
る方法が一般的
– 学籍番号、職員番号、など
• 行を特定するためのカラムが複数のカラムの
組み合わせという場合もある
千葉大学 12- 6
検索の高速化
• 検索の高速化には、「INDEX」と呼ばれるデータを
用意する。
– INDEXの代表的なものはBTREE(バイナリーツリー)
INDEX
Apple
検索条件 = Mango
リストの中央のデータと比較
リストの中央のデータと比較
Kiwi<Mango
Orange >Mango
Banana
Blueberry
Grape
Kiwi
Mango
Orange
Pineapple
Watermelon
リストの半分が検索対象
さらに半分
Kiwi
Mango
Orange
Pineapple
Watermelon
Kiwi
Mango
Orange
:
元のデータ数がN個とすると、log2 N回の比較で見つかる
千葉大学 12- 7
データベースの設計のポイント
• データベースシステム(RDBMS)が扱える形
にする
– RDMBSは「2次元」のテーブルである。つまり、ひ
とつのセルに複数のデータは入らない
• 同じデータはできる限り一箇所に格納する
– データ登録や更新がひとつのデータについて一
回ですむようにする
千葉大学 12- 8
ひとつのセルにはひとつのデータ
学籍番号
氏名
受講する講義
講師
78T1613
加藤洋一
回路理論
電磁気
回路理論(小郷)
電磁気(大川)
78T1615
金丸裕二
回路理論
計算機
回路理論(小郷)
計算機(倉田)
学籍番号
氏名
受講する講義
講師
78T1613
加藤洋一
回路理論
小郷
78T1613
加藤洋一
電磁気
大川
78T1615
金丸裕二
回路理論
小郷
78T1615
金丸裕二
計算機
倉田
千葉大学 12- 9
データはできる限り一箇所に格納(更新を簡単化)
学籍番号
氏名
受講する講義
講師
78T1613
加藤洋一
回路理論
小郷
78T1613
加藤洋一
電磁気
大川
78T1615
金丸裕二
回路理論
小郷
78T1615
金丸裕二
計算機
倉田
そのためにはテーブルを分割する
学籍番号
氏名
78T1613
加藤洋一
学籍番号
受講する講義
78T1615
金丸裕二
78T1613
回路理論
講義名
講師
78T1613
電磁気
回路理論
小郷
78T1615
回路理論
電磁気
大川
78T1615
計算機
計算機
倉田
千葉大学 12- 10
リレーショナルデータベースシステム(RDBMS)
• リレーショナルデータベースシステムは、SQLという言語で操
作します。
• 本講義では、フリーのSQLベースデータベースシステムでは
最も充実していると考えられているPostgreSQLを題材に
データベースシステムについて学習します。
• 今回は、Windows版のPostgreSQLを使用します。
• http://www.enterprisedb.com/products/pgdownload.do#windo
ws
PostgreSQLのホームページ
PostgreSQLの日本のユーザーグループ
www.postgresql.org
www.postgresql.jp
千葉大学 12- 11
SQL:データベースの作成
• データベースの作成はcreatedbコマンド
– 削除はdropdb
• テーブルの作成は、create tableコマンド
– 削除はdrop table コマンド
部品番号
部品名
CPU000001 Pentium 840
:
メーカー名
販売価格
仕入れ価格
Intel
29800
13000
:
:
:
:
create table parts
(
pid
varchar(10)
name
varchar(50)
maker
varchar(20)
price
int
buy
int
);
テーブル名
not null,
null,
null,
null,
null
カラムの定義
千葉大学 12- 12
テーブルに行を追加する
• Insert into コマンドを使います
– Insert into ‘テーブル名’ (カラム名のリスト)
values (値のリスト);
– テーブル定義の順に値を入れるときは、 (カラム
名のリスト) を省略できる
insert into parts values('CPU000001', 'Pentium 840', 'Intel', 49800, 25600);
insert into parts values('CPU000002', 'Pentium 830', 'Intel', 39800, 21100);
insert into parts values('CPU000003', 'Pentium 820', 'Intel', 29800, 15600);
insert into parts values('CPU000004', 'Athlon 3000', 'AMD', 19800, 9600);
insert into parts values('CPU000005', 'Athlon 3500', 'AMD', 29800, 14600);
千葉大学 12- 13
データベースからデータを取り出す
• Selectコマンドを使う
– Select ‘項目’ from ‘テーブル名’where ‘検索条
件’; (SQLは最後にセミコロンをつける)
– 項目は、カラム名、式などが入る
• 全ての項目のときは、*を使う
– Select * from parts;
• カラム名の指定
– Select pid, price from parts;
•式
– Select name, buy*100/price from parts;
– 実際にやってみましょう。
千葉大学 12- 14
データベースからデータを取り出す
• 検索条件はwhere句で指定する
– 簡単な形
• Select * from parts where price > 10000;
• Select * from parts where maker = ‘Intel’;
• Select * from parts where price > 20000 and maker
= ‘Intel’;
– 文字列の前方一致と後方一致(ワイルドカード)
• Select * from parts where name like ‘HD%’;
• Select * from parts where name like ‘%840’;
• Select * from parts where name like ‘%33%;
• 実際にやってみましょう
千葉大学 12- 15
更新と削除
• 更新
– Update ‘表名’ set ‘カラム名’=‘式’… where …;
– Where句で指定した行の特定のカラムの内容を
変更する。
• 削除
– Delete from ‘表名’ where …;
– Where句で指定した行を削除する。
• やってみましょう
千葉大学 12- 16
テーブルの積とJOIN
• テーブルの積
– 2つのテーブルの行の全ての組み合わせ(2つの
テーブルの行の積に相当する行が生じる)
– Select * from table_a, table_b;
• JOIN
– 2つのテーブルの一致するカラムを指定する。
– Select * from table_a, table_b where
table_a.id = table_b.id;
– 実際にやってみます。
千葉大学 12- 17
PythonからPostgreSQLにアクセスする
• PythonからPostgreSQLにアクセスすること
ができます。
– 今回は、psycopg2というフリーのパッケージを使
います。他にもいくつか方法があります。
import psycopg2
conn = psycopg2.connect('dbname=partsdb
user=postgres password=postgres')
cur = conn.cursor()
a = cur.execute (‘select * from parts;’)
b = cur.fetchall()
print b
cur.close()
conn.close()
千葉大学 12- 18
HTML
• HTMLは、Webページの書式の規定です。
– 基本的にテキストファイルです。
– 「タグ」と呼ばれるコマンドで書式などを指定しま
す。
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>Hello World</TITLE>
</head>
<body>
<center>
Hello World
</center>
</body>
</html>
千葉大学 12- 19
HTML
• 簡単な表です。
<table width=300>
<tr>
<td bgColor="#00cc66"> test 11 </td>
<td bgColor="#00cc66"> test 12 </td>
<td bgColor="#00cc66"> test 13 </td>
</tr>
<tr>
<td bgColor="#c0c0c0"> test 20 </td>
<td bgColor="#c0c0c0"> test 21 </td>
<td bgColor="#c0c0c0"> test 22 </td>
</tr>
<tr>
<td bgColor="#c0c0c0"> test 1 </td>
<td bgColor="#c0c0c0"> test 1 </td>
<td bgColor="#c0c0c0"> test 1 </td>
</tr>
</table>
千葉大学 12- 20
FORM
• フォームとは、ユーザーの入力エリアのことで
す。
– テキスト、選択、などいくつかの形式があります。
– 入力エリアの情報は、以下のようにしてサーバー
に伝えられます
• URLの一部として(…/ ?Min=1000&Max=5000)
• HTTPのコンテント領域に格納される
<form name="form1" method="post" action="/cgi-bin/parts2.py">
Minimum Price
<input type="text" name="min" value="0" width=100> <br>
Maxmum Price
<input type="text" name="max" value="1000000" width=100> <br>
<input type="submit" name="submit"
value="Select">
</form>
千葉大学 12- 21
CGI
• CGIとは、Webサーバー上で何らかのプログ
ラムを実行し、その結果をHTMLとして受け取
る仕組みです。
– CGIを作成するには様々な言語が使われていま
す。なぜかpではじまるものが多いです(perl, php,
python)。
– 実際に、サンプルプログラムを動かして見ます。
千葉大学 12- 22
サンプルのメモ
• 以下のパッケージをインストールします
– Apache(HTTPサーバー)
• http://www.apache.org
• ごく普通にインストールしてください。
– PostgreSQL(RDBMSサーバー)
• http://www.postgresql.org
• ごく普通にインストールします。指定したパスワードを
忘れないように。
– psycopg2(PythonからPostgreSQLを使うため
のもの)
• http://initd.org/psycopg/
• ごく普通にインストールします。
千葉大学 12- 23
サンプルのメモ
• Apacheの設定
– ApacheからPythonを使うため、以下の設定をし
ます。
• C:\Program Files\Apache
Group\Apache2\conf\httpd.confをメモ帳やWordPad
などのテキストエディタで開く(管理者権限が必要)
• #AddHandler cgi-script .cgiという行を探す。
• その次の行に以下を追加する。
• AddHandler cgi-script .py
• (‘#’はありません)
• タスクトレーのApacheのアイコンをクリック
し、’restart’を選ぶ。
千葉大学 12- 24
サンプルのメモ
• PostgreSQLへの初期データの登録
– 教材ファイルをダウンロードし、readme.txtを見て
ください
(http://www10.plala.or.jp/katofmly/chibau/sample_db.zip)
– Createdbコマンドでデータベースを生成。Sql.txt
に必要なコマンドのサンプルがあります。
– Psqlコマンドで、SQL文を直接実行します。
Sql.txtにコマンドのサンプルがあります。
– WebとCGIの統合はreadme.txtを見てください。