はじめに
データベースと聞くと、MySQLがぱっと思い浮かぶという感じだった。
でも、バックエンド開発に関して学んでいくと、ストレージという言葉やキャッシュ、リレーショナルデータベース、NoSQLなど、データに関する様々な言葉が出てくる。
そこで、Recursionのデータベース講座を参考にし、データの種類、データの表現方法、データベースの種類などを体系的に整理しておくことにした。
最終的には、リレーショナル・データベースの特性を関係代数から理解できるようになった。
データの保存先の種類
データの保存には主に以下の3つがある。
- メモリ
- ストレージ
- データベース
メモリ
- 高速だが揮発性があり、一時的な保存に向いている
ストレージ
- 永続的な保存が可能で大容量に向く
- 画像やCSS、動画などの静的ファイルを保存する
データベース
- 永続的に保存できるだけでなく、
- 検索や更新、関連データの操作など複雑な処理ができる
データの表現方法(データモデル)の種類
データには、表現方法として以下の4つのモデルがある。
- 関係モデル
- 実体関連モデル
- 半構造化モデル
- オブジェクトモデル
関係モデル
- 表(テーブル)形式のデータ構造
- スキーマ(型や構造)が固定
- SQLで操作する
実体関連モデル
- 現実世界の「人」「商品」などをエンティティとして図で表現
- データベース設計時に使われる
半構造化モデル
- JSONやXMLのような柔軟な構造
- スキーマが不要
- MongoDBなどのNoSQLで使われる
オブジェクトモデル
- プログラム上のクラスのような構造でデータを表現
- ORM(Object Relational Mapping)によってRDBと連携する
データモデルとデータベースの関係
- 関係モデルや半構造化モデルは、実際にデータを保存するデータベースとして使える
- 一方、実体関連モデルやオブジェクトモデルは、保存ではなく設計や操作のための考え方
NoSQLとは?
- リレーショナル(関係)モデル以外を採用したデータベースの総称
- 代表例:MongoDB、Redis、Firebase など
- 柔軟な構造とスケーラビリティが特徴
データベースの本質的な理解
今日一番の気付きが以下。
「今日の学びを紙に書いて、夜に見返す。これはデータベースでは?」
つまり、
- データベースとは、「データを保存し、あとで取り出せるように整理された仕組み」である
- 保存手段だけでなく、管理の仕組みを含んでいる
リレーショナルデータベースの理論背景
- リレーショナルデータベースは「関係代数」という数学理論に基づいて作られている
関係代数の3つの特徴
- 集合的(重複がない、順序がない)
- 関数的(同じ入力には必ず同じ出力)
- 合成可能(操作をいくつでも組み合わせられる)
この3つを理解すると、SQLの特徴や使い方の意味が腑に落ちるようになる。
SQLと関係代数のつながり
- SQLは関係代数の操作を人間にわかりやすく命令文にしたもの
例:
-
SELECT name FROM users WHERE age > 20;
→π_name(σ_age>20(users))
集合的
-
SELECT
結果の行の順序は保証されない →ORDER BY
が必要 - 重複は許される →
DISTINCT
で除去できる
関数的
- 同じクエリを同じテーブルに投げれば、毎回同じ結果が得られる
合成可能
- クエリをネストして複雑に合成できる → サブクエリ
最後に
SQLの背後にある関係代数の特徴(集合性・関数性・合成可能性)を理解すると、
- なぜ順序が保証されないのか
- なぜ
DISTINCT
があるのか - なぜクエリを重ねられるのか
など、SQLの設計本質が見えてきた。
調べれば調べるほど、「データ」に興味関心が出てきた。