メインコンテンツまでスキップ

第2章 システムとデータベースの関係 — DBMS という通訳者

この章で学ぶこと

  • Web システムの 3 層構造 (ユーザー / アプリケーション / データ) を図で説明できる
  • システムとデータベースを分離するメリットを 3 つ挙げられる
  • DBMS (データベース管理システム) の役割を 3 つ以上挙げられる
前提知識

第 1 章 データベースの基本概念 を理解していること。Web アプリケーションを使った経験 (ブラウザでサイトを操作したこと) があれば十分です。

Web システムは 3 つの層でできている

現代の Web システムは、大きく次の 3 層で構成されます。

役割具体例
ユーザー層ユーザーが直接触る画面Chrome / Safari / iOS アプリ
アプリケーション層ビジネスロジックの実行Laravel / Next.js / Django で書かれたサーバ
データ層データの保管と取り出しPostgreSQL / MySQL などの DBMS と、その背後のデータ

ユーザーが画面で「注文する」ボタンを押すと、リクエストはアプリケーション層に送られ、アプリケーションは DBMS を経由してデータベースに注文を記録する、という流れになります。

用語

DBMS (Database Management System): データベースを管理するソフトウェア。PostgreSQL / MySQL / Oracle Database / Microsoft SQL Server などが代表例。「データベース」という言葉は、データそのもの (テーブルやレコードの集合) と DBMS を含めた仕組み全体の両方を指して使われることが多いですが、本ガイドでは原則として「データベース = データの集合」「DBMS = それを管理するソフト」と区別します。

なぜシステムとデータベースを分けるのか

アプリとデータベースを分離する設計には、現代的な利点が 3 つあります。

メリット何が嬉しいか
独立性アプリのフレームワークを変えてもデータは残る。DB のバージョンを上げてもアプリを書き直さない
保守性アプリの不具合と DB の不具合を切り分けやすい (ログを別々に追える)
拡張性アプリサーバを 1 台から 10 台に増やしても DB は 1 台で共有できる、逆に DB の性能を上げてもアプリは触らない

複数のシステムが同じデータベースを使う

データベースを独立させると、複数のシステムから同じデータを共有できます。EC サイトの例を見てみましょう。

たとえば在庫管理ツールで在庫が「0」に更新されると、顧客向けサイトの商品ページにも即座に「在庫なし」と反映されます。データを 1 つの場所で持つことで、システム間の矛盾が起きにくくなるのです。

データベースを共有することのトレードオフ

複数システムが同じデータベースに直接アクセスする構成は、シンプルな反面、システム間の結合が強くなるというデメリットもあります。テーブル定義を変更すると、それを使う全システムに影響が出ます。大規模なシステム群では「データベースを共有せず、API 経由でデータをやり取りする」マイクロサービス的な構成を取ることもあります。本ガイドでは小〜中規模システムを想定し、共有データベースを前提に話を進めます。

DBMS は「通訳者」のような役割

DBMS (データベース管理システム) は、アプリケーションとデータベースの間に立ち、SQL という共通言語でやり取りを仲介します。

DBMS がなければ、開発者は自分でファイルを開いて行ごとに探し、ロックして書き戻すといったすべての処理を書く必要があります。DBMS はそれを肩代わりする「データのプロ」です。

DBMS の具体的な機能と主要な製品は第 6 章 DBMS と SQLで詳しく扱います。

演習

演習 1: 3 層構造の例

あなたが今日使った Web サービス (SNS / 動画サイト / ニュースサイトなど) を 1 つ選び、3 層構造のそれぞれに何が当てはまるかを書き出してみてください。

解答例

たとえば YouTube の場合:

YouTube での具体例
ユーザー層Chrome / Safari ブラウザ、iOS / Android アプリ、スマートテレビアプリ
アプリケーション層動画配信サーバ・レコメンドサーバ・広告配信サーバ・コメント API サーバなど多数
データ層動画ファイル本体 / メタデータ DB / 視聴履歴 DB / コメント DB / ユーザー DB など

気づくこと: 大きなサービスでは「アプリケーション層」と「データ層」がそれぞれ複数に分かれており、1 つのアプリが複数の DB を使ったり、1 つの DB を複数のアプリが共有したりする構造になっています。

ありがちな間違い: 「データ層 = データだけ」と思い込むこと。データ層にはデータそのものと、それを管理するDBMS の両方が含まれます。

演習 2: 分離するメリットを実例で

「システムとデータベースを分離していると嬉しい」具体的な場面を 1 つ考えてみてください。あなたが開発者・運用者・経営者のどの立場で考えても構いません。

解答例

たとえば次のような場面が考えられます。

  • アプリ書き換え時: Web フレームワークを Rails から Next.js に乗り換えるとき、データベースには手を入れずに済む。蓄積した顧客データを新システムでもそのまま使える
  • DB アップグレード時: PostgreSQL のメジャーバージョンを上げるとき、アプリ側のコードを書き直す必要がない (互換性のある範囲で)
  • アプリサーバの増設: トラフィックが増えたときにアプリサーバだけ 1 台 → 10 台に増やせる。データベースは 1 台のままで共有できる
  • 障害対応: 「画面が表示されない」という障害があったとき、アプリのログを見て解決すれば DB 側を触る必要がない

別解 (経営者視点): 開発を「フロントエンド担当」「バックエンド担当」「データベース担当」と分担できるため、専門性の高い人材を採用しやすい・並行作業しやすい。

まとめ

この章で学んだことを整理します。

  • 現代の Web システムは「ユーザー層 / アプリケーション層 / データ層」の 3 層構造
  • アプリとデータベースを分離することで、独立性・保守性・拡張性が得られる
  • DBMS は SQL という共通言語でアプリと DB の間を取り持つ「通訳者」
  • 複数システムが同じ DB を共有することでデータの一貫性が保てる (代わりに結合が強くなる注意点はある)

次章では、データベース設計が「なぜ重要か」を、システム開発のコスト構造から見ていきます。