コンテンツにスキップ
X

データベース入門

ウェブアプリが「ユーザー情報を保存する」「投稿を表示する」「商品を検索する」といった機能を持つとき、その裏側で動いているのがデータベースです。データベースを理解することで、ウェブアプリの設計全体が見えてきます。

対象読者: ウェブアプリの仕組みに興味があるプログラミング入門者の方

学習時間の目安: 読了 15分

前提知識: サーバーとクライアント の概念を理解していること

データベース(Database)とは、大量のデータを体系的に整理・保存し、効率よく検索・更新できるようにしたシステムです。

押入れに物をランダムに詰め込む場合と、棚に分類して整理する場合を比べると、後者の方が探したいものをすぐ見つけられます。データベースは後者のように、データを体系化して管理します。

なぜファイルではなくデータベースを使うのか

Section titled “なぜファイルではなくデータベースを使うのか”

データをテキストファイルやCSVファイルで管理することは技術的には可能です。しかし、ウェブアプリの規模が大きくなると多くの問題が生じます。

課題ファイル管理データベース
大量データの検索全件読み込みが必要で遅いインデックスで高速検索
同時アクセス複数ユーザーが同時に書き込むとデータが壊れるロック機構・トランザクションで保護
データの整合性手動管理が必要制約・外部キーで自動的に保証
バックアップ個別対応が必要組み込み機能やツールが充実

数万件・数百万件のユーザーが使うサービスでは、データベースなしには成り立ちません。

リレーショナルデータベース(RDB: Relational Database)とは、データを表(テーブル)の形式で管理するデータベースです。

Excelのスプレッドシートをイメージすると分かりやすいです。行(レコード)と列(カラム)で構成される表に、構造化されたデータを格納します。

ECサイトの商品テーブルを例に説明します。

products(商品)テーブル:

idnamepricestockcategory
1ワイヤレスイヤホン890042electronics
2コーヒーメーカー1280015kitchen
3ランニングシューズ65008sports
  • テーブル: データの種類を表す単位(上の例では「商品」テーブル)
  • カラム(列): データの属性(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はプログラミング言語ではなく、データを操作するための専用言語(クエリ言語)です。英語に近い直感的な構文が特徴で、初心者でも比較的学びやすいとされています。

  • ACID特性: データの一貫性・整合性を保証する4つの性質(Atomicity・Consistency・Isolation・Durability)
  • 外部キー: テーブル間の関係(リレーション)を定義できる
  • トランザクション: 複数の操作をひとまとめにして、全部成功 or 全部失敗を保証する

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": ["ブラック", "ホワイト", "ブルー"]
  }
}

入れ子構造や配列をそのままデータとして持てるため、商品ごとに仕様の項目が異なるようなケースに柔軟に対応できます。

どちらが「優れている」ということはなく、用途に応じて使い分けます。

観点RDBNoSQL
データ構造固定スキーマ(列が事前に決まっている)柔軟スキーマ(列を後から変えやすい)
得意なデータ整合性が重要なデータ(金融・注文管理)大量・多様なデータ(SNS投稿・ログ)
クエリの柔軟性SQLで複雑な検索が得意単純な検索が高速
スケール方法縦スケール(より性能の高いサーバーへ移行)横スケール(サーバーを台数で増やす)
トランザクション標準でサポート種類によって異なる

RDBが向いている場面: ECサイトの注文・在庫管理、銀行の振込処理、ユーザー認証 NoSQLが向いている場面: SNSのタイムライン、リアルタイムチャット、IoTのセンサーログ

DB種類特徴
MySQLRDB最も広く使われるオープンソースRDB。WordPressなど多くのウェブアプリで利用
PostgreSQLRDB高機能・高信頼性。JSON型サポートなど拡張性が高い
SQLiteRDBファイル1つで動作する軽量DB。開発・テスト用途に最適
MongoDBNoSQL(ドキュメント型)JSONライクなドキュメントを柔軟に保存。スタートアップ・プロトタイプに人気
RedisNoSQL(キーバリュー型)インメモリDB。高速なキャッシュやセッション管理に使用
SupabaseRDB(PostgreSQL)PostgreSQLをクラウドで提供。認証・リアルタイム機能も内蔵

ウェブアプリのアーキテクチャの中でデータベースがどこに位置するかを整理します。

[ユーザー(ブラウザ)]

      │ HTTPリクエスト

[ウェブサーバー / APIサーバー]

      │ SQLクエリ または APIリクエスト

[データベースサーバー]

      └── データを保存・返却

ユーザーが直接データベースにアクセスすることはありません。必ずサーバー(バックエンド)を経由してデータの読み書きが行われます。これにより、不正なアクセスやデータの改ざんを防ぎます。

  • データベース はデータを体系的に保存・検索するシステム
  • RDB は表形式でデータを管理し、SQLで操作する(整合性が重要な用途に向く)
  • NoSQL は柔軟な形式でデータを管理する(大量・多様なデータに向く)
  • どちらを選ぶかはデータの性質と用途による
  • ウェブアプリではサーバーを経由してDBにアクセスする

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