用語辞典・サーバー・Web運営

データベース

データベースとは

データベースは、一定の規則で整理したデータを保存し、検索・追加・更新できる仕組みです。商品、利用者、注文、記事、在庫などを、後から一貫した方法で取り出し変更できるように管理します。

厳密には、整理されたデータ収集をデータベース、それを作成・検索・更新・権限制御・回復するソフトウェアをDBMS(Database Management System/データベース・マネジメント・システム)と呼びます。日常会話では両方をまとめてデータベースと呼ぶことがあります。

データベースは単なる大きな表ファイルではありません。複数利用者が同時に操作しても規則を守り、検索を速くし、途中失敗から整合した状態へ戻す管理機能を含みます。

検索・追加・更新・削除の要求をDBMSが権限と規則で検査し、索引から対象データへ到達する関連する変更はトランザクションとして成功または取消へそろえる
アプリから検索、追加、更新、削除の要求が権限ゲートを通り、索引を備えた整理棚へ届き、二つの変更をまとめて確定または取消するデータベースのピクトグラム図解
図1DBMSは保存形式を抽象化し、アプリケーションが物理ファイル位置ではなく問い合わせとデータモデルで操作できるようにします。

データを扱う六つの基本機能

保存だけでなく、構造、検索、整合、同時実行、回復までを一組で管理する速さと正しさを別々に測る
  1. 01
    モデル・スキーマ

    どんなデータを、どの型・関係・文書構造・鍵で表すかを定義する。

  2. 02
    問い合わせ・操作

    条件、並び、集計、追加、変更、削除を高い抽象度の命令で指定する。

  3. 03
    索引

    全件を毎回読む代わりに、検索鍵から候補位置へ到達する補助構造を持つ。

  4. 04
    制約

    必須、重複禁止、参照関係、型など、保存してよい状態をDBMSでも検査する。

  5. 05
    トランザクション・並行実行

    関連操作を一単位にし、複数処理が同時に動いても矛盾した途中状態を見せない。

  6. 06
    復旧・監査

    ログとバックアップから障害前の整合状態へ戻し、誰が何を変更したかを追跡する。

図2製品とデータモデルによって、制約、トランザクション、問い合わせ、索引の能力と保証範囲は異なります。

データモデルで構造と操作が変わる

リレーショナルデータベースは表と行・列でデータを表し、鍵と制約で表間の関係を保ち、SQLで操作します。MySQL、PostgreSQLなどが該当します。

文書データベースはJSONに近い文書、キーと値保存は鍵から値、グラフデータベースはノードとエッジ、time-seriesデータベースは時刻付き系列を中心にします。「NoSQL」は一つのモデル名ではなく、リレーショナル以外の複数方式を広く含む呼び方です。

CRUDは利用者の目的、内部処理はそれより広い

CRUD(Create・Read・Update・Delete/クリエイト・リード・アップデート・デリート)は、作成、読出し、更新、削除の四操作です。アプリケーションの画面やAPIを整理する基本語として使われます。

DBMS内部では、問い合わせ解析、計画、索引探索、ロック、ログ、キャッシュ、制約、複製などが動きます。CRUDが同じでも、条件、トランザクション、整合性、同時実行の保証は設計で変わります。

スキーマと制約を正しさの境界にする

スキーマはデータの型、フィールド、表、関係などの構造です。NOT NULL、UNIQUE、CHECK、FOREIGN KEYなどの制約は、アプリケーションの不具合や別経路の入力があっても不正な状態を保存しにくくします。

すべてをデータベースだけで表せるわけではありません。営業時間、外部サービスの状態、複雑な業務規則はアプリケーションでも検査します。どの規則をどの層が保証するかを決め、二つの実装が矛盾しないようにします。

索引は検索を速くする代わりに更新を増やす

索引は検索・並べ替え・結合を速くできますが、追加・更新・削除時に索引も変更し、保存領域とメモリーを使います。列を多く含む索引を無計画に増やすと、書込と保守が重くなります。

遅い問い合わせは実行計画を見て、何件を読み、どの索引を選び、どこで並べ替え・一時的な処理が起きたかを確認します。データ量と値の偏りが変われば、同じ問い合わせの最適な計画も変わります。

トランザクションは関連する変更を一単位にする

注文作成と在庫減少のように、片方だけ成功してはいけない操作をトランザクションへまとめます。成功時にcommit(コミット)し、失敗時にrollback(ロールバック)します。

ACIDはAtomicity、Consistency、Isolation、Durabilityの頭文字です。全部成功か全部取消、定義した整合条件を保つ、同時処理の干渉を制御する、コミット済み結果を障害後も保持する、という信頼性の原則を表します。

分離を強くすれば無条件に良いわけではない

複数トランザクションが同じデータへ触れると、ロック待ち、デッドロック、更新競合が起きます。分離段階は、見えるデータと同時実行性のトレードオフを決めます。強い分離は待ち時間や再試行を増やす場合があります。

トランザクションを短くし、同じ資源を同じ順で更新し、デッドロック時に安全に再試行できる処理にします。外部APIの長い応答を待ちながらデータベースロックを保持しません。

バックアップと複製は目的が違う

バックアップは過去時点へ戻す複製です。複製は現在の変更を別ノードへ伝え、読取分散や障害切替に使います。誤削除や不正変更も複製へ伝わるため、複製だけでは過去へ戻せません。

論理的なバックアップ、物理バックアップ、トランザクションログを組み合わせ、目標復旧時点と保持期間を決めます。暗号化し、別の障害領域へ保存し、定期的に復元してアプリケーションから読めることを確認します。

データベースを直接インターネットへ公開しない

アプリケーションサーバーなど必要な接続元だけから到達できるネットワークへ置きます。管理者、アプリケーション、バックアップ、監視でアカウントを分け、スキーマ・表・操作を最小権限にします。

通信中と保存時の暗号化、鍵管理、監査ログ、秘密の回転を行います。個人データは収集目的、保持期限、削除、書き出し、マスキングを設計し、本番データを無加工で開発環境へ複製しません。

データベース設計は「どこへ保存するか」ではなく、「どの状態を正しいとし、誰がどの操作をでき、同時変更と障害後にどう正しさを取り戻すか」を決める仕事です。

DBMSとtransactionの確認資料:NIST CSRC Glossary「Database Management System」MySQL 8.4 Reference Manual「InnoDB and the ACID Model」

関連用語