このブログ記事では、DBMS、リレーショナルデータモデル、SQLといった基本的な概念を紹介します。

このDevOpsシリーズでは、ネットワーキング、Linux、Gitなどの様々な概念やDevOpsツールについて議論してきました。 最近では、アプリケーションのスケーリングのためにKubernetesに焦点を当てていますが、ほぼすべてのアプリケーションに不可欠なデータベースについては、 これまでは簡単に触れただけでほとんど無視してきました。したがって、アプリケーションを効果的にスケールする方法についてさらに議論を進める前に、 このデータベースシリーズでデータベースの基本について議論します。
データベース管理システム
データベースを作成する最も簡単な方法は、CSVやTXTファイルを使用してディスクにデータを保存し、スクリプトを介してアクセスすることです。 システムコールを使用して、オペレーティングシステムを介してファイルの読み書きができます。しかし、このシンプルなアプローチは、 I/O操作のため遅く、非効率的でスケーラブルではありません。すべてのクエリに対してファイル全体を読み込む必要があります。 さらに、データの正確性と一貫性、そしてセキュリティに不可欠なデータ整合性を確保するシステムがありません。 つまり、誰でもTXTファイルの任意の部分を同時に任意の方法で編集でき、潜在的にロジックを破壊する可能性があります。
したがって、データベースを適切に管理するためには、多くの場合、データベース管理システム(DBMS) と呼ばれる専用ソフトウェアが必要です。 DBMSは、データモデル(データの定義方法の抽象化)に基づいて、データベースの定義、作成、クエリ、更新、管理をサポートします。 DBMSは、特定のデータコレクションの説明であるスキーマを強制することでデータ整合性を確保します。 DBMSの例としては、SQLite、MySQL、PostgreSQLなどがあり、これらは単に"データベース"と呼ばれることもあります。 データベースはDBMSによって整理された記憶領域であり、DBMS、データベース、データモデルの集合はデータベースシステムとして知られています。 異なるDBMSは異なるデータモデルの実装を持っており、これはユースケースに基づいてDBMSを選択する際の重要な考慮事項です。
リレーショナルデータモデル
多くのデータモデルが利用可能ですが、最も一般的に選ばれるのは、数学的なリレーションの概念から派生したリレーショナルデータモデルです。 リレーショナルデータモデルは、エンティティ(データポイント)を表す複数の属性(列)のタプル(行)を持つデータベースのリレーション(テーブル)を定義します。 リレーションは単一のタプルを識別するための主キーを含み、外部キーは別の関係のタプルを参照するためのタプルの属性として定義でき、異なるリレーションの関係を定義します。 以下はリレーショナルデータモデルの外観を示しています。

リレーショナルデータモデルにより、異なるオブジェクトとそれらの関係を柔軟に表現することができます。 また、リレーションは抽象化であり、データの物理的表現とは分離されています。 これは、DBMSがユーザーやアプリケーションがデータベースを操作するためのリレーションに基づいたプログラミングインターフェースの背後で、 ストレージ内のデータを様々な異なる形で整理したり、異なる物理スキーマを使用したりできることを意味します。 以下は、リレーショナルデータモデルに基づくデータベースシステムがこのデータ独立性をどのように生じさせるかを示しています。

アプリケーションは、リレーショナルデータモデルに基づいて定義された論理スキーマ(logical schema)に、 セキュリティを付与する事前定義された外部スキーマ(external schema)とのみ対話します。 そして、DBMSは論理スキーマに基づいて物理スキーマ(physical schema)の実装を担当することで、物理的独立性を確立し、最適化を可能にします。 他のデータモデルもある程度のデータ独立性を達成でき、特定のアプリケーションにより適していますが、リレーショナルデータモデルはこの点で優れており、堅牢です。 したがって、このシリーズでは、他のデータモデルについても簡単に触れますが、主にリレーショナルデータモデルについて議論していきます。
SQL
リレーショナルデータモデルの物理的独立性は、DBMSによる最適化を可能にするだけでなく、 異なる物理スキーマを持つ異なるDBMS間で同じプログラミング言語を用いて論理スキーマと外部スキーマに対し操作することをも可能にします。 これが構造化クエリ言語(SQL) の誕生につながりました。リレーショナルデータベースシステムの優位性の恩恵もあり、 SQLは世界で最も使用されているプログラミング言語の一つです。
クエリの作成やアプリケーション、システム設計の最適化を考える際にDBMSの実装は重要ですが、ほとんどのユースケースでは、 わずかなパフォーマンス向上のために抽象化の背後にある複雑さに深入りする必要はありません。 したがって、異なるDBMS間でほとんど同じである、アプリケーションの視点からSQLを使用してデータベースと対話する基本を学ぶことから始めることができます。
SQLの学習を始めるには、まずdocker pull postgres
でイメージをプルし、docker run --name pg -e POSTGRES_PASSWORD=mypsecretpassword -d postgres
でコンテナをインスタンス化することで、
DockerコンテナでPostgreSQLをセットアップできます。次に、docker exec -it pg bash
でコンテナにターミナル経由でアクセスし、psql -U postgres
でデータベースにアクセスできます。
環境が正しく設定されているかを確認するためにSELECT 1;
を実行できます。
結論
この記事では、DBMSとリレーショナルデータモデルとは何か、そして効率性、データ整合性、柔軟性、セキュリティ、耐久性の観点から、 DBMSの必要性やリレーショナルデータモデルを好む理由について説明しました。 また、リレーショナルデータモデルによってもたらされた物理的独立性が生んだSQLについても議論しました。 次の記事からは、SQLについて掘り下げ、どのようにSQLを用いて基本的な操作を行うことができるかについて議論していきます。
リソース
- CMU Database Group. 2024. #01 - Relational Model & Algebra (CMU Intro to Database Systems). YouTube.
- Jansen, P. 2025. TIOBE Index for March 2025. TOBIE.