RDB入門
本日の講義はRDBMS (Relational Database Management System)を行いました。RDBMSはRDBやDB略す場合もあります。
RDBは過去にpostgresを利用したことがありますので、本日の講義内容は理解しやすかったです。
○RDBの概要
RDBは情報システムの要であり、RDBに蓄えられた情報は、その企業・団体の資産である。
RDBは多くの場合、大切な情報が入っているので、情報漏洩などもってのほか!SQL文を覚えるのも大切だけど、セキュリティ体制も万全にして、もしもの時のためにバックアップはしっかりとらないとですね!
○RDB概要 − 歴史
1969年、IBMのE. F. Codd博士がRDMSに関する論文を発表。
E. F. Codd博士・・・最初に考えた人は偉大です。。
○RDB概要 − 商用製品
Oracle, DB2 (IBM), SQLserver(MS)
上記が3代有料RDB。値段が高いです。。。安心を買うか買わないかでしょうか。。
○RDB概要 − オープンソース製品
MySQL, PostgreSQL。基本的に無料 。利用の仕方によっては、有料になるものもあるので注意。サポートなし。ただし、有償サポートを行う会社もある
上記が2代無料RDB。上記以外は、あまり聴かないですね。。
※メモ:オープンソースとライセンス形態
・GPL -- Linux,gcc >> 組込んだ・改良したソフトはGPLになり、ソースの公開を義務付けられる。
・LGPL -- OpenOffice >> 改良したソフトはGPLになるが、非ソースコード(コマンド、ライブラリー)を組み込んだソフトはGPLにはならない。
・BSD -- Apache,Mozilla,Ruby … >> 基本的にソース公開義務なし、無償で使える。
・GPLと有償の併用 -- MySQL >> MySQLは、GPLを選ばなければ有償 (ただし例外あり) 。http://www.s-style.co.jp/about_mysql/mysql_license.php
GNU 一般公衆利用許諾契約書 バージョン2
http://www.opensource.jp/gpl/gpl.ja.txt
つまり、MySQLを利用したアプリケーションなら、ソースコードを公開しないと有料ってことなんですね。。。
○RDB概要 ? 標準
・RDB操作で使う SQL言語は ISOで標準化されている。
・ただし、各RDBとも独自のSQLや機能を持っている。
・また、標準を部分的に満たしてないRDBもある。
・RDBを操作する API (ライブラリ)は各RDB毎に違う。
・統一的なAPIもいくつかある。ODBC(MS)、JDBC(Java), DBI(Perl,Ruby)
RDBごとに独自の書き方がある。それを統一してくれるAPIがある。
よくフレームワークとかで、統一できるのは統一してくれるAPIを利用しているからなのだろうか?
○RDBの原理 − テーブル
全てのデータを2次元のテーブル(表)に格納する。DBへの操作は行単位で行われる。
○RDBの原理 − リレーション
複雑な構造は表と表のリレーションで表現する
重複するデータは避けるべきだ!これが正規化!
○RDB技術 − 格納できるデータの型
現在は画像などのバイナリーデータも格納できる。
○RDB技術 − null の扱い
RDBにはカラムに値の入ってない状態をNULL として扱います。
NULLは’’(空の文字列)とは違い、特別な扱い(対象外)となります。
NULLは【対象外】になるので注意!
○RDB技術− インデックス
・インデックスはB-Treeがよく使われ、N個のデータに対し平均logN回の検索でデータを選択出来る。
・B-Treeはソートされたようなデータなのでソートも高速に行われる。
・インデックスを付けるとその分ディスクや更新処理時間が増加する。
・カラムの値に重複が多い場合は高速化されない。
インデックスを設定したからといって、必ず高速化するとは限らない。
○RDB技術− ユーザー管理
・RDBを操作するには、あらかじめ登録されたユーザーでログインする必要がある。
・ログイン時にはパスワード等の認証を設定できる。
・各ユーザーには、権限(アクセス出来るテーブル、操作)を細かく設定できる。
・ほとんどのRDBにはスーパーユーザーがある。
MySQLのスーパーユーザーは「root」。必ずパスワードを設定しよう!
○RDB技術− トランザクション
複数の更新中に失敗が起きた場合、全ての更新を無かった事にし、DBの一貫性を保つ。
また、トランザクションを実行しているプロセス以外からの参照アクセスは更新前の値を戻し、更新アクセスは待たされる。
銀行のシステムでこれがなかったら、大変ですね。。。
postgresで利用したことがあるので、概念は大丈夫。
○RDB技術−レプリケーション
・複数のサーバーに同じテーブルを置き、内容がいつも一致するようにする仕掛け。
・負荷分散、バックアップ等の為に行われる。
MySQLはレプリケーションが優れているらしい。postgresはレプリケーションが貧弱らしい。
これは大規模なシステムでは必須ですね!
○SQL 文
データ操作 (DML)
select : データの取り出し
insert : データの作成
update : データの更新
delete : データの削除
データ定義 (DDL)
create table : テーブルの作成
create index : インデックスの作成
drop table : テーブルの削除
alter table : テーブルの変更
grant : ユーザの登録・権限設定
・・・
postgresとMySQLは似ているが、違う部分も多々あるので、しっかり覚えよう!
○RubyでのDBプログラミング
・MySQLライブラリー
MySQL専用プログラムになる
・DBI
MySQL以外でも使えるように作れる
・ActiveRecord
Railsの一部だが、DB処理のみでも使える
SQL文を書かずにテーブルに対応したクラス(ActiveRecord)を操作する事で、DB処理が書ける
今回の実習では、シンプルにMySQLライブラリーを使用。
require 'mysql' db = Mysql.init db.connect("localhost","test1u","test1p","test1") result = db.query("select no,pos,name,goal from player") # SQL文の実行 result.each { |no, pos, name, goal| # 結果の取出し print no, " ", pos, " ", name, " ", goal, "\n" }