コース一覧
データベース内部構造:インデックス・トランザクション・分散DB
データベースの歴史

データベース内部構造:インデックス・トランザクション・分散DB

SQLの書き方ではなく、DBMSの内側を学ぶコースです。RDBとNoSQL、正規化、B-tree、トランザクションとMVCC、クエリプランナ、レプリケーションと分散SQLを通して、性能と整合性の判断根拠を身につけます。

1
データベースの基礎
0. データベースとは8分
1. RDB と NoSQL の違い8分
2. データベースの歴史8分
3. エンティティ関係モデル (ER)8分
4. 主キー・外部キー・候補キー8分
2
正規化
0. 正規化とは何か8分
1. 第1正規形8分
2. 第2正規形8分
3. 第3正規形8分
4. 非正規化のトレードオフ8分
3
インデックスと B-tree
0. インデックスの役割8分
1. B-tree の仕組み8分
2. B+tree(実際の DB 実装)8分
3. ハッシュインデックス8分
4. カバリングインデックス8分
4
トランザクションと ACID
0. トランザクションとは8分
1. ACID 特性8分
2. 分離レベル8分
3. MVCC(マルチバージョン同時実行制御)8分
4. デッドロックと回避8分
5
クエリ最適化
0. クエリプランナの役割8分
1. EXPLAIN の読み方8分
2. Nested Loop / Hash / Merge Join8分
3. インデックスチューニング8分
4. 統計情報とカーディナリティ8分
6
スケーリング
0. レプリケーション8分
1. シャーディング8分
2. CAP 定理8分
3. 結果整合性8分
4. NewSQL と分散 SQL8分

データベース内部構造:インデックス・トランザクション・分散DB

01データベースとは
02RDB と NoSQL の違い
03データベースの歴史
04エンティティ関係モデル (ER)
05主キー・外部キー・候補キー
06正規化とは何か
07第1正規形
08第2正規形
09第3正規形
10非正規化のトレードオフ
11インデックスの役割
12B-tree の仕組み
13B+tree(実際の DB 実装)
14ハッシュインデックス
15カバリングインデックス
16トランザクションとは
17ACID 特性
18分離レベル
19MVCC(マルチバージョン同時実行制御)
20デッドロックと回避
21クエリプランナの役割
22EXPLAIN の読み方
23Nested Loop / Hash / Merge Join
24インデックスチューニング
25統計情報とカーディナリティ
26レプリケーション
27シャーディング
28CAP 定理
29結果整合性
30NewSQL と分散 SQL

データベース内部構造:インデックス・トランザクション・分散DB

データベースの歴史

社員が 2 つの部署に所属できない

1960 年代の最初のデータベースは、データを木の形で持っていました。IBM の IMS が代表で、アポロ計画の部品管理にも使われています。親の下に子がぶら下がる構造は、部品表のように上下関係のはっきりしたデータとはよく合いました。

合わなかったのは、親が 2 つ必要なデータです。1 人の社員が開発部と品質保証部を兼務する、といった関係が表現できません。木では、子は 1 つの親しか持てないからです。

1970 年前後に登場したネットワーク型は、子が複数の親を持てるようにしてこれを緩めました。ただし今度は、データの並びと「どう辿って取り出すか」がプログラムに焼き付いています。構造を少し変えるだけで、そのデータを触る全プログラムを書き直すことになりました。

当時のプログラムには「まずこの入口を開き、次にこのポインタを辿り、そこから兄弟を順に見る」という道順が直接書かれていました。データの持ち方を変えるということは、書いてある道順を全部書き直すということです。

「どう取るか」を書かなくてよくなった

1970 年、IBM 研究所の E.F.Codd が論文を発表します。主張は「データを集合として扱えば、辿り方とデータを切り離せる」というものでした。使う側は欲しいものだけを書き、どう取り出すかは DBMS が決める。この分離が、いま当たり前になっている書き方の出発点です。

実装したのが IBM の System R とカリフォルニア大学の Ingres で、前者から SQL が生まれ、後者は PostgreSQL の祖先になりました。1979 年に Oracle が商用として登場し、1986 年に SQL が標準化されると、業界は一気にここへ収束します。以後 20 年ほど、データベースといえば RDB のことでした。

diagram (will load when visible)

1 台に収まらなくなって、また分かれた

2000 年代後半、Google や Amazon が抱えたのは「1 台の RDB に載らない量」でした。マシンを強くする方向には天井があります。そこで台数を並べる方向へ舵を切り、その代償として、書いた直後に読んでも古い値が返りうる状態を受け入れました。買い物かごに入れた商品が数秒だけ表示されないことは我慢できても、全世界の利用者が一斉に待たされるのは我慢できない、という判断です。BigTable と Dynamo の論文が広まり、Cassandra や MongoDB、Redis が続きます。分散したときに何を諦めるかを整理した CAP 定理という言葉が知られるようになったのも、この時期です。

使ってみた現場から出た声は「結合したい」「SQL で書きたい」でした。2010 年代の NewSQL は、複数ノードで合意を取る仕組みを内側に持ち込むことで、台数を増やしながら整合性も保とうとしています。Google Spanner や CockroachDB、TiDB がこの系統です。

いま使っている道具は、どの世代の答えも捨てていません。木構造の発想は JSON を扱う DB に、ネットワーク型はグラフ DB に受け継がれ、SQL という共通語は 40 年生き延びています。どれか 1 つが正解だったのではなく、その時代にいちばん高くついた問題が何だったかで、答えが入れ替わってきただけです。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • データベースデータを構造化して保存する仕組み
  • SQLデータベースを操作するための共通言語
  • PostgreSQL機能が豊富なオープンソースのRDBMS
  • 判断YES/NO 分岐を表す菱形
  • 木構造親子関係を持つ階層構造。
  • applicationJSON 本文を送るときの Content-Type
  • グラフノード(頂点)とエッジ(辺)で構成されるデータ構造。
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/27·更新 2026/08/26

関連レッスン

  • エンティティ関係モデル (ER)

    実体・関係・属性で現実世界をモデル化する手法を学ぶ

  • 主キー・外部キー・候補キー

    識別子としてのキーの種類と役割を整理する

  • 正規化とは何か

    なぜ正規化が必要なのか、更新異常の概念を理解する

  • インデックスの役割

    全件走査と索引参照の違いを計算量から把握する

分からないところは Tap (AI先生) に質問できます

24 時間いつでも、あなたのレベルに合わせて日本語で答えます。