Open1
理論から学ぶデータベース実践入門 [読書メモ]
SQLとは
- SQLはリレーショナルデータベース(以下RDB)に問い合わせを行うための言語でリレーショナルモデルがベースになっている
- 柔軟な言語なためリレーショナルモデルに沿った使い方もできれば、逸脱した使い方もできる
- SQLの構文や文法を見てもリレーショナルモデルは見えないため、リレーショナルモデルを知らないと逸脱しているか判断できない
- RDBの力を十二分に引き出すためにはSQLの知識だけでは不十分でリレーショナルモデルの知識も必要
リレーショナルモデルとは
- 現実世界のデータを「リレーション」という概念で表現するデータモデル
- データモデルはデータをどのように表現するかという概念の話
- 他のデータモデルとしてはKVS(Key-Value Store)がある
- ER図(Entity Relationship Diagram)のような設計を意味するモデリングとは別の話
- リレーショナルモデルを理解する上で最も重要な概念がリレーション
リレーションの定義
-
SQLにおいてリレーションとはテーブルのこと
-
見出し(Heading)と本体(Body)のペアで構成されている
-
見出しはn個(nは0以上の整数)の属性(Attribute)の集合
- 属性は名前とデータ型のペア
-
本体は属性値の集合である組、あるいは英語で言うタプル(tuple)の集合
リレーショナルモデル SQL リレーション テーブル タプル 行 属性 列
集合とは
- 物のあつまりを表現する数学的な概念
- 集合に含まれる個々の物を要素や元(Element)と呼ぶ
- 集合の要素には特に制約がない
集合が満たすべき要件
-
要素が集合に踏まれているかどうかを不確定要素がなく判定できる
- 逆に要素が何であるかがわからない未知のものは集合に含められない
-
集合の要素が重複してはいけない
- 集合論では同じ要素が何個含まれているかは意味を持たない
- 逆に「何個含まれているか」が演算結果に影響をあたえてはいけない
- 集合の要素はそれ以上分解できない
リレーショナルモデルとNULL
- 集合の一種であるリレーションにNULLを含めることができない
- 議論の余地はあるがリレーショナルモデルを正しく実践するにはNULLは排除すべき
- NULLを排除しながら、現実的な問題にどうやって立ち向かうのかが本書のテーマの一つ
SQLにあってリレーショナルモデルにないもの
要素の重複
- リレーションは同じ構造を持つタプルの数学的な集合であるため重複はない
- 制約がなければ重複してもSQL上のエラーはでないのでテーブルはそもそも集合ではなく多重集合(Multi set)であると言える
- 集合と多重集合は性質が異なるので起因してリレーショナルモデルとSQLの性質も異なる
- SQLをリレーショナルモデルに沿って使うにはテーブルを集合として使う必要があるため少なくともなんらかの一意性制約が必要になる
要素間の順序
- 集合には要素間に順序がない。一方でSQLには順序がある
- SQLをリレーショナルモデルに沿って使うには行やカラムの位置を意識したクエリを書いてはいけない
リレーションの更新
- リレーションは値であるため更新はできない。値を変更できるのは変数だけ。
- テーブルが値と変数の両方の機能を兼ねている