データベースの基本
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 には PostgreSQL、MySQL、SQLite があります。
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 / 3RDB(リレーショナルデータベース)でデータを操作するために使う言語はどれ?
まとめ
- データベースはデータを安全かつ効率的に管理するための仕組み
- RDB はテーブル形式でデータを管理し、SQL で操作する
- NoSQL はドキュメント型・キーバリュー型など柔軟なデータ構造を持つ
- ACID 特性がトランザクションの信頼性を保証する
- 用途に応じて PostgreSQL、MySQL、SQLite、MongoDB などを使い分ける
- Web アプリケーション開発では RDB(特に PostgreSQL)が最も一般的