<CodeLearn/>
データベース レッスン1

データベースの基本

RDB と NoSQL の違いと選び方を学ぼう

データベースとは何か?

データベースとは、構造化されたデータを保存・管理するためのシステムです。 ファイルにデータを保存することもできますが、データベースを使うと以下のメリットがあります。

  • 大量のデータを効率的に検索・フィルタリングできる
  • 複数のユーザーが同時にアクセスしてもデータが壊れない
  • データの整合性を自動的に保証できる(制約やトランザクション)
  • バックアップや復旧の仕組みが用意されている

データベースを管理するソフトウェアをDBMS(Database Management System)と呼びます。 PostgreSQL、MySQL、MongoDB などが代表的な DBMS です。

RDB(リレーショナルデータベース)

RDB は、データをテーブル(表)の形式で管理します。 行(レコード)と列(カラム)で構成され、テーブル同士を「リレーション(関連)」で結びつけられます。 操作には SQL(Structured Query Language)を使います。

-- usersテーブルの例
+----+----------+------------------------+
| id | name     | email                  |
+----+----------+------------------------+
|  1 | 田中太郎 | tanaka@example.com     |
|  2 | 鈴木花子 | suzuki@example.com     |
|  3 | 佐藤一郎 | sato@example.com       |
+----+----------+------------------------+

-- postsテーブル(user_id で users と紐づく)
+----+---------+------------------+
| id | user_id | title            |
+----+---------+------------------+
|  1 |       1 | 初めての投稿     |
|  2 |       1 | 2回目の投稿      |
|  3 |       2 | こんにちは       |
+----+---------+------------------+

代表的な RDB には PostgreSQLMySQLSQLite があります。

NoSQL データベース

NoSQL は「Not Only SQL」の略で、テーブル形式ではないデータベースの総称です。 柔軟なデータ構造を持ち、大規模データやリアルタイム処理に向いています。

ドキュメント型

JSON のようなドキュメントでデータを管理

例: MongoDB, Firestore

キーバリュー型

キーと値のペアでデータを管理

例: Redis, DynamoDB

カラムファミリー型

列指向でデータを格納、分析向き

例: Cassandra, HBase

グラフ型

ノードとエッジで関連性を管理

例: Neo4j, Amazon Neptune

// MongoDB のドキュメント例(JSON形式)
{
  "_id": "64a1b2c3d4e5f6789",
  "name": "田中太郎",
  "email": "tanaka@example.com",
  "posts": [
    { "title": "初めての投稿", "createdAt": "2025-01-15" },
    { "title": "2回目の投稿", "createdAt": "2025-01-20" }
  ]
}

ACID特性

RDB のトランザクションは ACID特性 を保証します。 これにより、データの信頼性が確保されます。

Atomicity(原子性)

トランザクション内の操作はすべて成功するか、すべて失敗するか。中途半端な状態にならない。

Consistency(一貫性)

トランザクション前後でデータベースの制約(NOT NULL、UNIQUE等)が常に満たされる。

Isolation(独立性)

同時に実行される複数のトランザクションが互いに干渉しない。

Durability(永続性)

コミットされたデータはシステム障害が起きても失われない。

-- トランザクションの例:銀行の送金処理
BEGIN;

-- Aさんの口座から10000円引く
UPDATE accounts SET balance = balance - 10000 WHERE user_id = 1;

-- Bさんの口座に10000円足す
UPDATE accounts SET balance = balance + 10000 WHERE user_id = 2;

-- 両方成功したらコミット(確定)
COMMIT;

-- 途中でエラーが起きたらロールバック(取り消し)
-- ROLLBACK;

代表的なデータベース

PostgreSQL

最も高機能なオープンソース RDB。JSON 型、全文検索、地理空間データなど豊富な機能を持つ。

用途: Webアプリ全般、エンタープライズ、分析

MySQL

世界で最も普及している RDB。シンプルで高速。WordPress など多くのサービスで採用。

用途: Webアプリ、CMS、ECサイト

SQLite

サーバー不要の軽量 RDB。ファイル1つでデータベースが完結する。

用途: モバイルアプリ、デスクトップアプリ、プロトタイプ

MongoDB

代表的なドキュメント型 NoSQL。スキーマレスで柔軟。JSON ライクなデータ構造。

用途: リアルタイムアプリ、IoT、コンテンツ管理

確認クイズ

1 / 3

RDB(リレーショナルデータベース)でデータを操作するために使う言語はどれ?

まとめ

  • データベースはデータを安全かつ効率的に管理するための仕組み
  • RDB はテーブル形式でデータを管理し、SQL で操作する
  • NoSQL はドキュメント型・キーバリュー型など柔軟なデータ構造を持つ
  • ACID 特性がトランザクションの信頼性を保証する
  • 用途に応じて PostgreSQL、MySQL、SQLite、MongoDB などを使い分ける
  • Web アプリケーション開発では RDB(特に PostgreSQL)が最も一般的