Menu
Coddy logo textTech

データベースとは?

データベースとは、プログラムがすばやく安全に検索、追加、変更、削除できるように、コンピュータ上に整理して保存されたデータの集まりです。PostgreSQL、MySQL、SQLite、MongoDBなどの、データベース管理システム(DBMS)と呼ばれるソフトウェアが管理します。

執筆: Kevin Spektor, 共同創業者、CTO

更新日: 2026年9月24日

Webサイトにログインするとき、サイトは何百万件もの中からあなたのアカウントを見つけ、パスワードを確認し、設定を読み込みます。しかもそれを数ミリ秒で行います。テキストファイルを開いて1行ずつ読んでいるわけではありません。SELECT * FROM users WHERE email = 'ana@example.com' のような要求をデータベースに送り、データベースはインデックスを使って目的の行に直接たどり着きます。本の巻末にある索引とよく似た仕組みです。

データベースの仕組み

2つの要素が協力して動いています。データベースは、決まった構造で整理されたデータです。データベース管理システム(DBMS)は、そのデータをファイルに保存し、一貫性を保ち、要求に答えるプログラムです。PostgreSQL、MySQL、SQLiteはDBMSで、あなたの顧客の一覧がデータベースです。

リレーショナルデータベースでは、データはテーブルに入っています。各テーブルには列(名前、国、ポイント)と行(ユーザー1人につき1行)があります。要求は次のステップを経て処理されます。

  1. プログラムがクエリを送ります。ふつうはSQL(Structured Query Language)で書かれています。
  2. DBMSはクエリを解析し、どう答えるかの計画を立てます。どのテーブルを読むか、インデックスを使ってほとんどの行を飛ばせるか、といったことです。
  3. DBMSは決まった大きさのページ単位でディスクからデータを読みます(SQLiteのデフォルトは4,096バイト、PostgreSQLは8 KB)。よく使うページはメモリに置いておきます。
  4. 行を絞り込み、並べ替え、組み合わせてから、結果を返します。

PythonにはSQLiteが付属しているので、ここで本物のデータベースを動かせます。

Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5

プログラムは、どう検索するかを一度も指示していません。ほしい結果を記述するだけで、それをどう手に入れるかはDBMSが決めます。これが、データベースに問い合わせることと、リストに対してループを書くことの大きな違いです。

データベースの種類

種類データの保存形式例主な用途
リレーショナル(SQL)キーで関連付けられた行と列のテーブルPostgreSQL、MySQL、SQLite、Oracle、SQL Serverユーザー、注文、支払い。ほとんどのアプリケーション
ドキュメントJSONのようなドキュメントMongoDB、Firestore、CouchDBレコードごとに項目が異なるデータ
キーバリュー1つのキーで引く値Redis、DynamoDBキャッシュ、セッション、カウンタ
ワイドカラム多数のサーバーに分散された、列を柔軟に持てる行Cassandra、HBase非常に大量の書き込み
グラフノードとノード間の関係Neo4jソーシャルネットワーク、レコメンド
時系列時刻でインデックスされた測定値InfluxDB、TimescaleDBメトリクス、センサーの読み取り値
ベクトル数値のリスト(埋め込み)pgvector、Pinecone、MilvusAI機能のための類似検索

リレーショナルでないものは、よくNoSQLとまとめて呼ばれます。テーブル、制約、SQLで幅広い問題をうまく扱えるので、ほとんどのアプリケーションでは今でもリレーショナルデータベースが標準の選択肢です。複数の種類を組み合わせた製品も多く、PostgreSQLはJSONドキュメントを保存でき、pgvectorはそこにベクトル検索を追加します。

トランザクション: すべてか、無か

アナからベンにお金を移すには、2つの変更が必要です。ベンに足し、アナから引くことです。その間でプログラムがクラッシュすると、お金がどこからともなく現れてしまいます。トランザクションは変更をひとまとめにし、すべてが保存されるか、1つも保存されないかのどちらかにします。次の例では、2つ目の変更がルール(残高はゼロ未満になってはいけない)に違反するので、データベースは1つ目の変更も取り消します。

transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}

ベンの40は一度足されてから取り消されたので、合計はちゃんと合っています。リレーショナルデータベースは、トランザクションについてACIDと呼ばれる4つの性質を約束しています。原子性(すべてか無か)、一貫性(CHECK のようなルールが常に守られる)、独立性(同時にトランザクションを実行する2人のユーザーが、互いの途中の作業を見ない)、永続性(一度保存された変更は、クラッシュや停電があっても残る)です。

データベースとスプレッドシートとファイルの違い

テキストファイルやCSVファイルスプレッドシートデータベース
サイズプログラムが読み込める分だけExcelでは1シートあたり1,048,576行数十億行
同時に複数が書き込めるかできない限られるできる(ロックとトランザクションによる)
1件のレコードを探すファイル全体を読むフィルタや検索インデックスで引く
データのルールなし任意の入力規則型、制約、外部キー
質問のしかた自分でコードを書く数式SQLまたはクエリAPI

スプレッドシートは、1人が数千行を眺めるには良い道具です。複数のプログラムやユーザーが同時にデータを書き込むようになったり、データがルールに従う必要が出てきたりしたら、データベースが適切な道具です。

データベースはどのようにデータを守るのか

DBMSは、データファイルに手を加える前に、各変更をログに書き込みます(ログ先行書き込み、WAL)。そのため、クラッシュした後でも、終わっていなかった作業をやり直したり取り消したりできます。PostgreSQLは8 KBのページごとにチェックサムを保存でき、故障しかけたディスクが壊れたデータを返すと、チェックサムの失敗として報告します。ユーザーと権限によって、誰がどのテーブルを読んだり変更したりできるかが決まり、レプリケーションは別のサーバーにコピーを保ちます。また、プログラムはユーザーの入力を、上の例の ? のプレースホルダのようにパラメータとして渡さなければなりません。SQLの文字列に貼り付けてはいけません。そうするとSQLインジェクション攻撃が起きてしまいます。

よくある誤解

  • 「SQLはデータベースだ」 SQLは言語です。PostgreSQL、MySQL、SQLiteは、その言語を理解するデータベースです。
  • 「NoSQLはSQLをまったく使わないという意味だ」 この言葉はふつう「not only SQL」と読まれていて、CassandraのCQLのように、SQLによく似た問い合わせ言語を持つNoSQLデータベースもいくつもあります。
  • 「データベースは必ず大きなサーバーだ」 SQLiteは、プログラムが直接開く1つのファイルで、サーバーはまったくありません。AndroidやiOSのすべてのスマートフォンの中で動いています。
  • 「データベースに入れたデータは永遠に安全だ」 データベースが守ってくれるのはクラッシュからであって、誰かがうっかり DELETE を実行することからではありません。バックアップはやはり必要です。

次に読むページ

SQLコースでは、最初の SELECT からクエリを学べます。次のステップはSQLiteのドキュメントで学べます。SQLiteとは、テーブルの作成、インデックス、SQLインジェクションの防ぎ方です。データがディスク上でどう並んでいるかを知るにはバイトとは何かを読んでください。壊れたページがどのように検出されるかはチェックサムで説明しています。

よくある質問

データベースを簡単に言うと何ですか?
データベースとは、プログラムが情報をすばやく見つけ直せるようにしまっておく場所です。完璧な索引の付いた書類棚を思い浮かべてください。「先週のすべての注文」と頼めば、レコードが何百万件あっても、数ミリ秒で答えが返ってきます。
データベースの具体例は?
スマートフォンの連絡先はデータベースに保存されています。AndroidにもiOSにもSQLiteが組み込まれているのです。銀行は顧客の口座をOracleやPostgreSQLなどのデータベースで管理し、ウィキペディアは記事をMariaDBに保存しています。オンラインストアは、商品、顧客、注文を互いに関連付けられたテーブルで管理しています。
データベースの4つの種類とは?
公式な4種類のリストはありません。よく挙げられる4つは、リレーショナルデータベース(テーブルとSQL)、ドキュメントデータベース(JSONのようなレコード)、キーバリューストア(キーで値を引く)、グラフデータベース(ノードと関係)です。古い教科書では、階層型データベースとネットワーク型データベースも挙げられています。
人気のデータベースのトップ5は?
Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDBが、何年にもわたってDB-Enginesの人気ランキングの上位5つを占めています。開発者の間では、2023年以降Stack Overflow Developer SurveyでPostgreSQLがもっとも使われているデータベースで、スマートフォンやブラウザに組み込まれているSQLiteは、もっとも広く配備されているデータベースです。
データベースとDBMSの違いは?
データベースは、テーブルやドキュメントとして整理されたデータそのものです。DBMSは、そのデータをディスクに保存し、データへの要求に応えるソフトウェアで、PostgreSQLやMySQLがその例です。両方をまとめて「データベース」と呼ぶこともよくあります。
データベースを使うにはSQLを学ぶ必要がありますか?
リレーショナルデータベースなら、はい。SQLはテーブルを作り、データに質問するための言語で、基本なら数日で身につきます。多くのプログラムは代わりにSQLを書いてくれるライブラリを使いますが、SQLを知っていれば、そのライブラリが何をしているのか、なぜクエリが遅いのかがずっと理解しやすくなります。
Coddy programming languages illustration

Coddyでコードを学ぼう

始める