データベース入門
ウェブアプリが「ユーザー情報を保存する」「投稿を表示する」「商品を検索する」といった機能を持つとき、その裏側で動いているのがデータベースです。データベースを理解することで、ウェブアプリの設計全体が見えてきます。
対象読者: ウェブアプリの仕組みに興味があるプログラミング入門者の方
学習時間の目安: 読了 15分
前提知識: サーバーとクライアント の概念を理解していること
データベースとは
Section titled “データベースとは”データベース(Database)とは、大量のデータを体系的に整理・保存し、効率よく検索・更新できるようにしたシステムです。
押入れに物をランダムに詰め込む場合と、棚に分類して整理する場合を比べると、後者の方が探したいものをすぐ見つけられます。データベースは後者のように、データを体系化して管理します。
なぜファイルではなくデータベースを使うのか
Section titled “なぜファイルではなくデータベースを使うのか”データをテキストファイルやCSVファイルで管理することは技術的には可能です。しかし、ウェブアプリの規模が大きくなると多くの問題が生じます。
| 課題 | ファイル管理 | データベース |
|---|---|---|
| 大量データの検索 | 全件読み込みが必要で遅い | インデックスで高速検索 |
| 同時アクセス | 複数ユーザーが同時に書き込むとデータが壊れる | ロック機構・トランザクションで保護 |
| データの整合性 | 手動管理が必要 | 制約・外部キーで自動的に保証 |
| バックアップ | 個別対応が必要 | 組み込み機能やツールが充実 |
数万件・数百万件のユーザーが使うサービスでは、データベースなしには成り立ちません。
リレーショナルDB(RDB)とは
Section titled “リレーショナルDB(RDB)とは”リレーショナルデータベース(RDB: Relational Database)とは、データを表(テーブル)の形式で管理するデータベースです。
Excelのスプレッドシートをイメージすると分かりやすいです。行(レコード)と列(カラム)で構成される表に、構造化されたデータを格納します。
テーブル・行・列の例
Section titled “テーブル・行・列の例”ECサイトの商品テーブルを例に説明します。
products(商品)テーブル:
| id | name | price | stock | category |
|---|---|---|---|---|
| 1 | ワイヤレスイヤホン | 8900 | 42 | electronics |
| 2 | コーヒーメーカー | 12800 | 15 | kitchen |
| 3 | ランニングシューズ | 6500 | 8 | sports |
- テーブル: データの種類を表す単位(上の例では「商品」テーブル)
- カラム(列): データの属性(id・name・price・stock・category)
- レコード(行): 1件のデータ
RDBのデータを操作するために SQL(Structured Query Language)という言語を使います。
-- 価格が10000円以下の商品を価格順に取得
SELECT name, price
FROM products
WHERE price <= 10000
ORDER BY price ASC;SQLはプログラミング言語ではなく、データを操作するための専用言語(クエリ言語)です。英語に近い直感的な構文が特徴で、初心者でも比較的学びやすいとされています。
RDBの特徴
Section titled “RDBの特徴”- ACID特性: データの一貫性・整合性を保証する4つの性質(Atomicity・Consistency・Isolation・Durability)
- 外部キー: テーブル間の関係(リレーション)を定義できる
- トランザクション: 複数の操作をひとまとめにして、全部成功 or 全部失敗を保証する
NoSQLとは
Section titled “NoSQLとは”NoSQL(Not Only SQL)とは、テーブル形式以外の方法でデータを保存するデータベースの総称です。
RDBの「すべてのデータを表形式にする」という制約を取り除き、より柔軟な形式でデータを扱えます。
代表的なNoSQLの種類:
| 種類 | 特徴 | 代表的なDB |
|---|---|---|
| ドキュメント型 | JSONに近い形式でデータを保存 | MongoDB・Firestore |
| キーバリュー型 | キーと値のシンプルな対応関係 | Redis・DynamoDB |
| カラム型 | 列単位でデータを管理 | Apache Cassandra |
| グラフ型 | ノードとエッジでデータの関係を表現 | Neo4j |
ドキュメント型のMongoDBを例にすると、RDBのテーブル形式とは異なり、次のようなJSONライクな形式でデータを保存します。
{
"id": 1,
"name": "ワイヤレスイヤホン",
"price": 8900,
"specs": {
"battery": "30時間",
"bluetooth": "5.3",
"colors": ["ブラック", "ホワイト", "ブルー"]
}
}入れ子構造や配列をそのままデータとして持てるため、商品ごとに仕様の項目が異なるようなケースに柔軟に対応できます。
RDBとNoSQLの使い分け
Section titled “RDBとNoSQLの使い分け”どちらが「優れている」ということはなく、用途に応じて使い分けます。
| 観点 | RDB | NoSQL |
|---|---|---|
| データ構造 | 固定スキーマ(列が事前に決まっている) | 柔軟スキーマ(列を後から変えやすい) |
| 得意なデータ | 整合性が重要なデータ(金融・注文管理) | 大量・多様なデータ(SNS投稿・ログ) |
| クエリの柔軟性 | SQLで複雑な検索が得意 | 単純な検索が高速 |
| スケール方法 | 縦スケール(より性能の高いサーバーへ移行) | 横スケール(サーバーを台数で増やす) |
| トランザクション | 標準でサポート | 種類によって異なる |
RDBが向いている場面: ECサイトの注文・在庫管理、銀行の振込処理、ユーザー認証 NoSQLが向いている場面: SNSのタイムライン、リアルタイムチャット、IoTのセンサーログ
代表的なデータベース
Section titled “代表的なデータベース”| DB | 種類 | 特徴 |
|---|---|---|
| MySQL | RDB | 最も広く使われるオープンソースRDB。WordPressなど多くのウェブアプリで利用 |
| PostgreSQL | RDB | 高機能・高信頼性。JSON型サポートなど拡張性が高い |
| SQLite | RDB | ファイル1つで動作する軽量DB。開発・テスト用途に最適 |
| MongoDB | NoSQL(ドキュメント型) | JSONライクなドキュメントを柔軟に保存。スタートアップ・プロトタイプに人気 |
| Redis | NoSQL(キーバリュー型) | インメモリDB。高速なキャッシュやセッション管理に使用 |
| Supabase | RDB(PostgreSQL) | PostgreSQLをクラウドで提供。認証・リアルタイム機能も内蔵 |
ウェブアプリでのDBの位置づけ
Section titled “ウェブアプリでのDBの位置づけ”ウェブアプリのアーキテクチャの中でデータベースがどこに位置するかを整理します。
[ユーザー(ブラウザ)]
│
│ HTTPリクエスト
▼
[ウェブサーバー / APIサーバー]
│
│ SQLクエリ または APIリクエスト
▼
[データベースサーバー]
│
└── データを保存・返却ユーザーが直接データベースにアクセスすることはありません。必ずサーバー(バックエンド)を経由してデータの読み書きが行われます。これにより、不正なアクセスやデータの改ざんを防ぎます。
- データベース はデータを体系的に保存・検索するシステム
- RDB は表形式でデータを管理し、SQLで操作する(整合性が重要な用途に向く)
- NoSQL は柔軟な形式でデータを管理する(大量・多様なデータに向く)
- どちらを選ぶかはデータの性質と用途による
- ウェブアプリではサーバーを経由してDBにアクセスする
よくある質問
Section titled “よくある質問”Q: データベースを使い始めるのに何が必要ですか?
A: SQLiteは追加インストールなしで多くの言語環境で使えます。クラウドDB(Supabase・PlanetScale など)はブラウザ上で無料から使い始められ、ローカルへのインストールが不要です。入門段階では、これらから始めるのが手軽です。
Q: SQLは必ず習得する必要がありますか?
A: ウェブエンジニアとしてキャリアを積む場合、SQLの基礎は必要になる場面が多くあります。ただし、ORM(Object-Relational Mapping)というツールを使えば、SQLを直接書かずにデータベース操作が可能です。初心者はORMから入り、必要に応じてSQLを学ぶアプローチも一般的です。
Q: NoSQLを使えばSQLを覚えなくていいですか?
A: NoSQLを使う場合でも、MongoDB Compass などのGUIツールやクエリ構文を使ってデータを操作する必要があります。また、実務では複数種類のDBを併用することが多いため、SQLの基礎を知っておくことは有益です。
このページへのリンク(英語): Introduction to Databases