データベースのメモ

ちょっとMySQLをいじりながら、覚えたことを書きなぐる。
表とテーブルはだいたいおんなじ意味で。


▼データベース
 データの管理に特化したシステムやアプリ。利用する側(プログラム等)はSQLなど決まった手続きで読み書きし、
 管理はデータベース側がおこなう。

 RDBという、リレーショナル(関係型)なやつが有名。相互に関係するテーブル(≒表)が複数あるみたいなイメージ。
 使う側はSQLで読み書きする。利用する側とRDB側との細かいマッチング差異を吸収するためにAPIが提供されたりしてる。
 ODBCとかJDBCとか。
 
 ディレクトリサービスというツリー構造のものもある。LDAPとか。有名どころではActiveDirectoryもLDAP。ほか、OpenLDAPやら。
 なんかLDAPしか分かんない。LDAPは狭義にプロトコルのことで、RDBに対するSQLみたいなもんだけど、そこから広がって
 サービス・サーバ側のこともLDAPて言ってるぽい。
 機能としては、データの更新よりも検索性に重点が置かれてる感じ?
 
 NoSQLてのが、ビッグデータの隆興に前後して、出てきたみたい。DBといえばRDBSQL)みたいな風潮に、
 一石を投じる的な意味も、暗に含むのかもしれない。(このへんはNoSQLとか Not only SQLとかで調べると読み物がいろいろ)
 ともあれ、ビッグデータを扱うにはRDBが不向き、みたいな背景から生まれたっぽく、
 利用するための手続きとしてはSQLのような汎用性はないものの、ビッグデータ向けのパフォーマンスなどに優れる仕組みで、
 なんかナウい感じだそうだ。


RDB
 いちばんなじみがあるやつ。テーブルが関係しあうアレ。
 テーブルの正規化が重要だそうで、資格試験とかにもそのへんが頻出。
 正規化は第五正規形まであるが、上位の試験やDB最前線的な現場でない限り、
 第三正規形までで概ね用が足りるみたいだ。

 ・非正規形
  繰り返しがあるorありうるような作り。主キーとかも特に無かったりとか。
  「これ表にしようか」って思うようなモノや、その土台の帳票とか、っていうイメージ。
  主キー:その行を一意に特定できるデータ列みたいなもん。モノによるけど、IDとか社員番号とか。

 ・第一正規形
  非正規形から繰り返しを排除して主キーを設定したテーブル。
  なおこの段階で第二正規形や第三正規形にすでに到達してることもありうる。

 ・第二正規形
  第一~から部分従属を排除したもの。
  複合キーな主キーについて、その一部だけで定まるような列がない(存在しないor別テーブルに切り出した形)。

 ・第三正規形
  第二~から推移従属を排除したもの。
  列P,Q(,R)があったとして、
   ・PならばQが一意に定まる。
   ・QならばRが一意に定まる。
   ・RならばPは一意に定まらない。
  ような部分がない(存在しないor別テーブルに切り出した形)。
  社員番号|名前|部署ID|部署名|部署代表者名 とかを
  社員番号|名前|部署ID と 部署ID|部署名|部署代表者名 とに分ける、みたいな。

 ・テーブル間の関係はキー(外部キー)で紐づくので、テーブルの切り出し時は適切なキーを設定する。

 ・モデル図で語るならER図を使う。1対多とか、0以上とか、1以上とか、0or1とか、そんなんも表現できる。

 ・インデックス付けると検索のパフォーマンスup、更新のパフォーマンスdown。
  トレードオフなので、インデックスの検討が必要なら、考えて設計しないと、な感じ。
  マスタデータテーブルは更新頻度低、参照されること多し、な性質なので、インデックスが向くかも、
  トランジションデータテーブルは更新頻度高、参照されること少なし、な性質なので、インデックス不向きかも、
  ・・・みたいに考えるのかな?


▼つくり
 トップダウン型:イチからデータベースを設計していく。手持ち資源が非正規形だったり。
 ボトムアップ型:すでに点在するデータ(テーブル類)をうまいこと集めてつなげてデータベースに仕立て上げていく。