テーマ研究会(2011/10/04)
~ データベース~
政策情報学部 渡辺恭人
データベース
• Webアプリケーションに必要なもの
• データベースとは?
– 必要に応じて情報を取り出せるしくみ、たとえば 住所録みたいなもの• 例、住所録
– 知人や友人の住所が列記されている – 必要に応じて探せる • 例、山田さんの電話番号は? – 大がかりなもの:NTTの電話帳 2データベースとは?
• 住所録や電話帳はデータベース?
– 本当の意味ではデータベースではない – なぜなら、コンピュータのデータではないから• 住所録や電話帳の内容を入力してコンピュー
タのデータにしたら、データベース!
– どこがどうかわるのか? – 紙の住所録でできなかったことができる • 名前以外でも検索できる、名字だけ、名前だけ、住所 、電話番号でも。 3データベースにするには?
• コンピュータのデータであること以外にもある
• データの作り方・持ち方に規則が必要
– 登録されるデータの単位が1件単位でばらばらに できること – データのどの部分がどのような意味を持つかが 決まっていること 4レコードとフィールド
• レコード
– データは、1件ごとにばらばらにできなければなら ない・この1件をレコードという • 住所録の場合、一人一人の情報がレコード – 100人分のレコードは100レコード• フィールド
– レコードの構成:氏名・郵便番号・住所・電話・メル アド・身長・・・ • すべてのレコードは同じ欄に区切られなければならな い • この欄をフィールドという 5データベースと表計算
• 表計算と同じに見える
– 表計算は、行と列で構成されている – Excelで住所録を作る人もいる • データベースの要素を満たすから同じことができる• 概念の違いを理解する
– データベース:仕組みの概念を指す • ソフトの種類を限定する言葉ではない – 表計算:ソフトの種類を指す – データベースがデータベースであるためには、そ の要素を満たしていれば、ソフトはなんでもいい 6データベースとして便利?
• 表計算
– 市川市に住んでいる人のデータを抜き出す場合 • 住所の列でソートし、条件に合う行を選択し、コピーし て別のワークシートに貼る• ワープロ
– 行・列の概念がないからもっと不便• データベースソフトの出現
– データベースを管理するための専用ソフト • Microsoft Accessなど 7データベースソフトの役割
• データファイルの取り扱い
– 住所録:住所のデータが格納されているファイル• 表計算
– 全住所データがワークシートに表示される• データベースソフト
– レコード単位で表示と入力ができる – 検索や並べ替えのメニューがある – 画面の設計ができる – 定型的な業務を行うためのプログラム言語もある 8データベースソフトの現状
• 個人ベースだとあまり流行っていない
– 高い:4~5万円 – 中途半端に難しい – 使い道がない• 会社の業務だけ
9住所録だけじゃないデータベース
• 例、日記
– 日々の記録をつけるのに使う • ファイルでもできるが・・・いろいろ面倒 • 日記ソフトでもできるが・・・いろいろ面倒 – データベースだと管理が楽 – 1日分を1レコード、日付と内容をフィールドとする • 日付は自動 • さまざまな検索が可能 • データを追加できる:カロリー摂取量とか• 実際Blogはデータベースで作られている
10その他:いろいろ
• リスト系のデータ
– 蔵書やCD、コレクションの品々などのデータ• 家計簿
– 情報を加工し、計算する機能を利用する• 日々のさまざまなことを記録する何でもデー
タベース
• でも、データベースソフトが高かったら気軽に
使えない
11無料で使えるデータベースMySQL
• SQL(Structured Query Language)に対応した
無料データベースシステムを使う
• SQL
– データベースを操作するための言語 • プログラミング言語ではない• SQLの例(jushorokuというデータベースに1件
の住所情報を登録する場合)
– insert into jushoroku values (‘千葉商科大学’, ‘272’ , ‘8512’ , ‘千葉県市川市国府台’, ‘1-3-1’,
SQLは面倒か?
• 構文は決まっている
– insert into テーブル名 values データ
• ボタンの指示より言葉のほうが楽
• 実用上は、20種類程度の構文を覚えれば、
ほとんどのやりたいことはできる
MySQL
• PostgreSQLなどほかにもSQLに対応したオープンソ ースのデータベースシステムはある – オープンソース • プログラムが公開され、誰もがそれを改変したり、再配 布したりが許されているソフト • 開発が一私企業に占有されてない • もちろん無料• MySQL
– 唯一LinuxでもWindowsでもMacでも使える – 性能も高い 14研究室サーバにログインする
• Tera Term Proというソフトウェアを使用する
• 接続先
– www.cyaneum.org (202.244.37.57)• ログイン情報を入力
– ユーザ名: CUCと同じ(例、b040000) – 初期パスワード • 今日作った人:仮パスワード: hogeの後に、ユーザ名 からaを取ったもの – 例、b040000の人は、hoge040000 15Tera Term:ログイン画面
ログイン後
パスワード変更
• 仮パスワードを変更します(必須)
• passwdコマンドを使います
18 ① passwdと入力し、 [Enter]キーを押す。 ② 古いパスワードを入 力し、 [Enter]キーを押す。 ※表示されません。 ③ 新しいパスワードを 入力し、 [Enter]キーを押 す。※表示されません。 ④ 新しいパスワードを もう一度入力し、 [Enter] キーを押す。※表示され ません。 変更終了後、exitと入力し、[Enter]キーを押すMySQLモニタの起動
• MySQLサーバを操作する • TeraTermで研究室サーバにログイン • コマンドプロンプトで、mysql –u ユーザ名(大学と 同じ) -pと入力 • パスワードを入力( hoge2011 ) – ※仮パスワード • モニタが起動• show databases; と入力し、[Enter]を押す
19
設定確認など
• 自分を確認する
– select now(), user(), version();
• 自分のパスワードを変更する
– SET PASSWORD = PASSWORD('パスワード');
• 自分用のデータベースを使用する
– たとえば、ユーザ名がb040000の人は、 – use b040000;と入力し、[Enter]
21
(リレーショナル)データベース
• データモデルがリレーショナルモデルであるデータベー ス – テーブル同士の関連付け(リレーションシップ) • いくつかのテーブルを一つのテーブルとして扱える • テーブル(表)にデータを格納 – フィールドとレコードで構成 – フィールド:データの項目を表す – レコード:データ1行分 • 主キーの必要性 – 特定のレコードを「識別」する22
テーブル
行
23
テーブルの構成
氏名 電話番号 住所 小林 ○○ 0552-AA-BBBB 甲府市□□1-7-11 是枝 △△ 0427-CC-DDDD神戸市○○区☆☆4-8-25 後藤 ×× 0975-EE-FFFF 大分市△△1-9-7 列名、またはフィールド名 表 ま た は テ ー ブ ル 列、またはフィールド 行 、 ま た は レ コ ー ド24 商品一覧 商品番号 商品名 単価 1 りんご 100 2 みかん 50 3 ぶどう 150 4 バナナ 120 5 メロン 500 売り上げ一覧 商品番号 商品名 単価 売上個数 売上金額 1 りんご 100 10 1000 3 ぶどう 150 20 3000 3 ぶどう 150 25 3750 5 メロン 500 5 2500 5 メロン 500 8 4000 受注明細 受注番号 明細番号 取引先名 商品名 単価 数量 金額 1 1 千葉商店 3 150 12 1800 1 2 千葉商店 4 120 35 4200 2 1 千葉病院 1 100 43 4300 2 2 千葉病院 2 50 20 1000 2 3 千葉病院 5 500 10 5000 3 1 千葉バス 4 120 5 600 テーブル テーブル テーブル データベース データベースの構造:テーブルの集合
クエリ(query: 問い合わせ)
• 構文(日常的に使用するもの)
25 クエリの種類 意味 CREATE データベースやテーブルを作る ALTER テーブルの構造を修正する INSERT テーブルにデータ(レコード)を追加する SELECT テーブルからレコードを選び出す UPDATE テーブルの内容を修正する DELETE レコードを削除 DROP テーブルやデータベースを削除するデータの型
• フィールドはあらかじめ定義しておかなけれ
ばならない
– 「どんなデータを入れるのか」 – 文字なのか、数字なのか、数字は何桁なのか…• データの型・・・データの種類
– MySQLで使用するデータ型 • 文字型、数値型、日付・時刻型・リスト型 26データ型
• とりあえず3つだけ使うことにする
• 数値型
– とりあえずINTで – -2147483648~ 2147483648• 文字型
– CHAR型:最も一般的 • 桁数とセットで使う:CHAR(120) ⇒半角で120文字 – 最大255文字まで – TEXT型:もっと長い文字列:最大65536文字 27データベースとテーブルの作成
CREATE
28
C:¥mysql¥bin>mysql -u root -p Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or ¥g. Your MySQL connection id is 1 to server version: 4.0.26-nt
Type 'help;' or '¥h' for help. Type '¥c' to clear the buffer.
mysql> create database lesson;
Query OK, 1 row affected (0.03 sec)
mysql> show databases; +---+ | Database | +---+ | lesson | | mysql | | test | +---+
3 rows in set (0.00 sec)
データベースを使う
USE
• データベースを使うためには、どのデータベ
ースを使うか必ず指定する必要がある
• 基本構文
– use データベース名;• MySQLモニタで、
– use ログイン名; – 「Database changed」と表示される 29テーブルを作る
• データベースの中にテーブルを作る
– テーブル:Excelではワークシートに相当 – 日本語も使えるが、ここでは混乱させないために 半角英数のみを使う• 練習用サンプル:都道府県の人口データベー
ス(テーブルの名前:todofuken)
30 フィールド名 データ型 内容 ken char(50) 都道府県名 kencho char(50) 県庁所在地 jinko int 人口 領域はざっくり大きめに確保テーブルを作る
• 基本構文
– create table テーブル名 (フィールド名1 その データ型, フィールド名2, そのデータ型, ・・・);• ここでの例
– テーブル名: todofuken– フィールド名: ken kencho jinko
• モニタで入力
– create table todofuken ( ken char(50), kencho char(50), jinko int );
テーブルを確認する
• 実行結果
• テーブルを確認する
– show tables; 32 mysql> use b040000; Database changedmysql> create table todofuken ( ken char(50), kencho char(50), jinko int); Query OK, 0 rows affected (0.01 sec)
mysql> show tables; +---+ | Tables_in_lesson | +---+ | todofuken | +---+
フィールドの確認
• 基本構文
– show fields from テーブル名; – テーブル名を必ず指定する
• モニタで入力
– show fields from todofuken;
33
mysql> show fields from todofuken;
+---+---+---+---+---+---+ | Field | Type | Null | Key | Default | Extra | +---+---+---+---+---+---+ | ken | char(50) | YES | | NULL | | | kencho | char(50) | YES | | NULL | | | jinko | int(11) | YES | | NULL | | +---+---+---+---+---+---+ 3 rows in set (0.00 sec)