SQLに強くなりたい

最近SQLを勉強しています。 勉強していて思うのは、SQLの細かい操作方法とか、便利な使い方とかも大事なんですけど、そもそもSQLって何?どんな仕組み?ってことです。 ともかく、データベース、そしてSQLの仕組みにフォーカスして、メモってみます。 出典:http://amzn.asia/e0JOzKv

データベースってどんなものがあるの?リレーショナルデータベースとは?

歴史的に、データベースは三種類ある

 - 階層型  - ネットワーク型  - リレーショナル型

上二つは、データ同士の関係を親子関係として表現する。 対して、リレーショナル型では、データを表として表現する。表を(数学的な)集合としてとらえる。 (だいたいエクセルみたいなものを想像して間違いないのでは) リレーショナルデータベースとは、リレーショナルデータモデルにもとづくデータベースのこと。

RDBMSって?

そもそも、DBMSとはデータベースの管理(セキュリティ、入出力の扱い)を一手に担ってくれているシステム。(DataBase Manegement System) RDBMSとは、リレーショナルデータベースを管理するためのシステム。 リレーショナルデータモデルは原著論文があるらしい(引用数えげつない)https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf

https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf

 

SQLって?

SQLは、RDBMSと対話してリレーショナルデータベースを操作するための言語。

ちょっと一息

いっぱい単語が出てきた。なんとなく言葉の関係としては、 - データベースを使って大量のデータを効率よく管理したい - データの持ち方はいろいろある。そのうちの一種がリレーショナル型。 - データベースを扱うシステムとして、データベースの様々な管理を一手に引き受けてくれているのがDBMS。リレーショナルデータベースを扱うDBMSRDBMS。 - RDBMSに命令して、我々がデータをうまいこと取り出せるようにするための言語が、SQL

リレーショナルデータベースの主な構成

  • データベース
  • テーブル:リレーショナルデータベースは、いくつものテーブル(表)からなる
  • 行と列:一つの表は、複数の行と列からなる。(だいたい、列はそれぞれのデータの属性(実際に列には名前を付けて、その列名のことを属性ともいう)を表しており、行は1つのいろんな属性を持つデータの組を表すって感じ)

キーについて

  • 表の中で、特別な意味を持つ列のことをキーと呼ぶ。
  • 主キー(primary key):表の中の1つの行を特定するために使う列のこと。(主キーが重要である理由は???)
  • 候補キー:主キーとなりうる列が複数ある時の、それぞれのキーのこと。主キーを1つ選んだ時、その他の候補キーのことは代替キーと呼ぶ。
  • 連結キー:複数の列を組み合わせるとキーになる(行を特定できる)とき、それらを連結キー、複合キーと呼ぶ。

リレーションシップをとる

  • 1つのデータベースには複数の表があるが、それらを互いにつなぎ合わせて、新たな表を作ることができる。
  • だいたい、特定の列を介して複数の表をつなぎ合わせる(例:商品コード)
  • 外部キー:ある表Aではその列Xは主キーではないが、別の表Bでは列Xが主キーであるようなとき、「列Xは表Aの外部キーである」という。

演算

リレーショナルデータベースでは、関係代数という理論に基づいた演算を表に対して行うことができる。 この理論では表を集合としてとらえ。表にそれらの演算を行う。そして、求める結果を得る。 関係代数における演算には、集合演算と関係演算がある。

集合演算

  • 和・差・積・直積
  • 和:複数の集合から。両方の集合のすべての要素を集めたもの
  • 差:複数の集合から、元の集合にしか存在しない要素を集めたもの。
  • 積:複数の集合から、両方の集合に含まれる要素を集めたもの。
  • 直積:複数の集合から、両方の集合のすべての要素のすべての組み合わせを集めたもの。

関係演算

  • 選択・射影・結合・除算
  • 選択:表の中から、条件に合った行を抜き出す演算
  • 射影:表の中から条件に合った列を抜き出す演算
  • 結合:対応する列を介して複数の表を結び付け、新たな表を作り出す。
  • 除算:あまり使われない(RDBMSで実装もされない?)らしいので省略

正規化

  • 正しく演算を実行し、効果的にデータを操作することができるようにするには、データを整理し、特定の規則に従った単純な票を定義する必要がある
  • 正規化:その規則に従って表を分割する手続き
  • 正規形:正規化された表のこと。正規形には第1~第5正規形がある。
  • 第1正規形:1つの行の中に繰り返し現れる列がない + 重複している列を切り離し冗長さをなくす
  • 第2正規形:主キーとなる列の値が決まれば、ほかの列の値がおのずと決まる + 冗長な(特定の列の値に従属している)列をなくす
  • 第3正規形:主キーとなる列以外の列の値によって、ほかの列の値が決まることはない (←の条件を満たさないような列の組があったら、別の表に切り離す)

SQLでできること

データベースを扱う言語には、次のような機能が必要とされ、当然SQLはこれらのことができる。 - データベースや表を定義し、作成する。(データ定義言語(DDL)) - データベースのデータを追加、更新、削除したり、データベースからデータを検索したりする。(データ操作言語(DML)) - データベースのセキュリティや、データの整合性を維持する。(データ制御言語(DCL))

  • SQL手続き型言語:1つの命令書を単独で記述する  (cf. 手続き型言語(Cなどの言語):複数の命令をまとめ、処理の流れに従って順番に記述していく)