#目的
入門 Python3をやっていて8.4 RDBMS の理解が浅くSQLに関して勉強しても頭に入ってこなかったため、体系的に理解したくまとめる。
#そもそもデータベースとは?
- ビジネスの活動の中でデータ(事実)を蓄積し、そのデータを情報としての価値を最大限に活かせるようにするための道具、またはインフラ基盤。
##データベース・マネジメント・システム(DBMS)
複数のプログラムによって利用されるデータを1つの場所で保管するもの。
###ファイルシステムとデータベースの違い
- ファイルシステム
- 必要な情報がどこにあるのかをそれぞれプログラムで記述しなければならない。
- 同時実効性を保つ仕組みがないので、開発者がプログラムで制御する必要がある。
- データベース
- 必要な情報がどこにあるかはデータベースが管理してくれるのでデータがどこにあるかを意識する必要がない。
- 同時実効性を保つ仕組みがDBMSで提供される。
##データベースの種類
- データベースには以下の3種類がある。
- 階層型データベース
- ネットワーク型データベース
- リレーショナル型データベース
###階層型データベース
- 会社の組織図のようにデータはツリー構造で表せる。ある一つのデータが複数のデータに対して、親子の関係を持つ。
- データのアクセス方法は一通りしかない。
- 冗長/重複が発生しやすくなる。
- 階層構造に変更があった場合、それに合わせたプログラムの変更が必要になる。
###ネットワーク型データベース
- データは網の目で形で表現され、それぞれのデータ単位(ノード)が繋がっているから、ネットワーク型と呼ばれる。
- 複数の親データへのアクセスが可能。
- 冗長性排除
以上の2つのデータベースはデータ構造への依存性が強いため、構造を意識したプログラミングの必要性やデータ構造変更に伴うプログラム改変の必要性は、メンテに大きな負荷がかかる。そこで出てきたのが、今回の本題であるリレーショナル型データベース。
###リレーショナル型データベース(以下、RDBMS)
- データを行と列から構成される2次元の表形式で表す。
- データ同士は複数の表と表の関係によって関連つけられ、SQL(構造化問合せ言語)によりユーザーの目的に応じて簡単に操作可能。
- 上記2つのDBと比較して以下のようなアドバンテージがある。
- プログラムとデータの分離
- 柔軟化つ容易なデータの取り出し
- データベース操作の簡略化
RDBMSについてもっと掘り下げてみる。
#RDBMS
##RDBMSの主な構成要素
- 表(テーブル)、データベース・エンジン、SQLの3つで構成されている。
- 表(テーブル)はデータを格納する。
- データベース・エンジンはRDBMSに対して操作を行う。
- SQLはRDBMSに要求を出す言語。
###表(テーブル)
- RDBMSはデータを行(ロー、レコード)と列(フィールド、カラム)の2次元構造で格納する。
###データベース・エンジン
- RDBMSに対してクライアント側(プログラム実行部分)からリクエスト要求があったとする。
- クライアントの要求は一旦、「データベース・エンジン」に渡される。
- データベース・エンジンがクライアントに変わってRDBMSへの処理を行う。
- その結果をRDBMS→クライアントに返す。
###SQL(Strutured Query Languageの略)
- SQLは以下の3つに分類できる
- データ定義:データを格納する表を定義。
- データ操作:表に対してデータの検索、更新、挿入、削除、複数の表を結合。
- トランザクション機能:データを更新してから、更新情報が確定するまでの一連の流れを管理。
##RDBMSを利用したデータ取り出しの簡単な流れ(おさらい)
- クライアントからRDMBSに対してSQLを使って、リクエストを要求する。
- SQLによって要求されたリクエストをデータベース・エンジンが受け取る。
- SQLの要求に対してデータベース・エンジンがディスク内の表からそれに対応するデータを取り出す。
- データベース・エンジンが取り出したデータをクライアントに返す。
#感想
簡単ではあるがデータベースとは何か、そしてデータベースがどういう風に使われているのかを理解することができた。下記の参考文献はデータベースに関しての図解があり、入門者の私にも理解しやすかった。
また、データベース・エンジンはruby on railsのMVCモデルのC(controller)のような役割似ていると感じた。
Ruby on Rails チュートリアルかじっていてよかった。
######参考文献
「基礎から始めるデータベース入門セミナー」
https://www.oracle.com/technetwork/jp/articles/index-155234-ja.html