データベースを何故使うのか
Menu Menu
データベースの4つの仮定
Atomic(原子性) Consistent(一貫性) Isolated(独立性) Durable(永続性) 独立性 プログラムとデータは独立 整合性 ある時刻を取ると、すべてのデータがちゃんとしている 矛盾していない、曖昧でない 完全性 そのデータベースに関するどんな質問にも必ず答えられるAtomic はデータの最小単位が壊れないこと。
Consistent とはデータの操作単位(Transaction)の列に対して要求仕様が成立することを保証できること。実際には、Transaction の直列可能性(Serializability)で保証する。
これらは本当か?
(例を考えよう) エディタとテキスト 学籍番号 誰がどう答えたかを調べる (反例を考えよう!) 漢字コード オーバーブッキング 難しい質問データベースでは、制限を付けることにより、この三つを満たしている。
共通の言葉で表現されている データの関係が有限 質問はデータの決まった関係に対してのみおこなわれる 変更は矛盾しないようにおこなわれる
整合性とスケーラビリティ
Database には、以下の仮説がある。
整合性(ACID)とスケーラビリティとは両立しないという仮説 (CAP 定理)まだ、証明されていない。
データベースは、こういう制限があるのだという認識を持って使う
データベースにするべきかしないべきか?
単にファイルとして取っておくだけではデータベースにはならない。では、どういう時にとっておくべきか?
同じようなデータが多量にある 多数の人が入力する 多数の人がアクセスする 長い間、保管する必要がある いろいろな解析をしたい
データベースの利点
大量のデータに対しても高速に検索、追加、削除、変更が可能 データを変更する際に矛盾がないようにする機能がある スムースな拡張が可能 信頼性が高い さまざまな質問に対処できる
データベースの種類
Flat text 構造化された text ( XML, YAML, Property List ) Fileに対する Standalone Database (SQLite) Server 型 Database (mySQL, PostgreSQL, Oracle) 分散(Distributed) Database (Cassandra)Database へのアクセスは SQL が主流。(IBMによって作られた Query Language)
それぞれ使い方がある。
Standalone Application
SQLiteを使うのが良いと思われる。SQL の勉強にも良い。
Documenation は「必ず英語で読む」
ソースコードには、日本語のコメントを書き込まない。
普段の勉強に英語を組み込むこと。
SQLite には、Perl からアクセスする。
レコード (record)
データの固まり。操作の単位。
おこなったアンケート 一枚の回答用紙 質問と答え 答の種類これらを、
ファイル レコード フィールド名 フィールドの値 フィールドの型という。
フィールドの型
選択肢 文字 数字 真理値 番号 / ID
トランザクション (transaction)
データを処理する単位
中途半端に終らない。成功するか、失敗するかどっちか。
transaction begin end commit abort
アプリケーション中に現れるデータ
網羅的に考える
使用状況を考える
例題を考える
ネットワークゲームを作成することを考えよう。そこで必要とされるデータは何か?
MindMap
アプリケーションに必要なことを自由に列挙していくFreeMind http://freemind.sourceforge.net/wiki/index.php/Main_Page
問題1
ネットワークゲームのデータを考えるUse case diagram
アプリケーションにどんなトランザクションが必要かを考えるastah* http://astah.change-vision.com/ja/product/astah-community.html
問題2
ネットワークゲームの login課題の提出の方法
〆切は二週間。課題は、Lecture 1 の問題1なら、Subject: Practice on Database Lecture 1.1
というサブジェクトで「学校の正規のアカウント」から電子メールで提出すること。携帯メールからとかは受け付けません。
図などの提出物は学科の WWW/Wiki 上に置き、そのURLを電子メールにいれる。添付しないこと。
プログラムコードは、外部からアクセス可能な学校の分散版管理システムに登録し、そこの
repository URL
を送ること。分散版管理システムは学科で用意してもらうこと。
課題毎に reposity を別に用意すること。