RDB(リレーショナルデータベース)とは?仕組み・正規化・ACID・スケーリングまで実務で使える基礎知識

RDB(リレーショナルデータベース)とは

RDB(Relational Database、リレーショナルデータベース)は、データを「表(テーブル)」形式で管理し、表同士の関係(リレーション)をキーによって定義・操作するデータベースのパラダイムです。1970年にエドガー・F・コッド(E.F. Codd)が提唱したリレーショナルモデルに基づき、商用・オープンソース問わず多くのデータベース管理システム(RDBMS: Relational Database Management System)がこの考え方を実装しています。

歴史と基本概念

リレーショナルモデルは1970年のCoddの論文「A Relational Model of Data for Large Shared Data Banks」で導入されました。データを二次元の表で表現することで、冗長性や曖昧性を減らし、理論的に整合性を担保しやすくしました。このモデルは、データの整合性、独立性、操作性を向上させ、SQL(Structured Query Language)などの宣言的言語による操作を可能にしました。

テーブル・行・列・キー

基本単位はテーブル(relation)。テーブルは列(attributes、カラム)と行(tuples、レコード)から成ります。主な用語は次のとおりです。

  • 主キー(Primary Key): 各行を一意に識別する列または列の組合せ。
  • 外部キー(Foreign Key): 他テーブルの主キーを参照することでテーブル間の関係を表す。
  • 候補キー、代替キー: 一意性を満たすキーの候補。

正規化(Normalization)と参照整合性

正規化はデータの冗長性を減らし、更新処理時の不整合を防ぐためにテーブルを分割する技法です。第一正規形(1NF)、第二正規形(2NF)、第三正規形(3NF)はCoddらによって体系化され、ボイス・コッド正規形(BCNF)などの改善もあります。正規化は設計段階での重要な考え方ですが、パフォーマンスや運用を考慮して敢えて非正規化するケースもあります。

参照整合性は外部キー制約などによって保証され、親テーブルに存在しないキーを子テーブルが参照できないようにします。

トランザクションとACID

RDBの重要な特徴の一つがトランザクション管理です。トランザクションは複数の操作を1つのまとまりとして扱い、次のACID特性を満たします。

  • Atomicity(原子性): トランザクション内の操作は全て実行されるか全て取り消されるかのどちらか。
  • Consistency(一貫性): トランザクションはデータベースを一貫した状態から別の一貫した状態へと遷移させる。
  • Isolation(独立性): 同時実行トランザクションは互いに干渉しないように見える。
  • Durability(永続性): コミットされた変更は永続的に保存される。

これらは特に金融や決済などの整合性が重要なシステムで不可欠です。

SQLと操作モデル

RDBの代表的な操作言語がSQLです。データ定義(DDL)、データ操作(DML)、データ制御(DCL)などを通じてテーブル作成、検索(SELECT)、挿入(INSERT)、更新(UPDATE)、削除(DELETE)、トランザクション制御(COMMIT/ROLLBACK)を行います。SQLは宣言的言語であり、ユーザーは「何を欲しいか」を指定し、具体的な実行計画はRDBMSのクエリオプティマイザが決めます。

インデックスとパフォーマンス

大量データの検索性能を高めるため、インデックス(B-tree、Hash、B+tree、全文検索インデックスなど)が用いられます。インデックスは読取性能を改善しますが、書込時のオーバーヘッドとストレージ消費を増やします。クエリ最適化(実行計画、統計情報)とインデックス設計はRDB運用で最も重要な作業の一つです。

OLTPとOLAP

RDBは運用系(OLTP: On-Line Transaction Processing)に強みがありますが、分析系(OLAP: On-Line Analytical Processing)でも用いられます。ただし、OLAP向けにはカラム指向データベースやデータウェアハウス、列指向ストレージ、マテリアライズドビューなどが使われ、高速集計に最適化されます。

スケーリングと分散化

従来のRDBは垂直スケール(スケールアップ:CPU・メモリ増強)を得意としますが、近年は水平スケール(スケールアウト)への要求が高まり、次のような手法が取られます。

  • レプリケーション: マスター・スレーブ(またはプライマリ・セカンダリ)で読み取り負荷を分散。
  • シャーディング(分割): データをキーで分割して異なるノードに分散。
  • 分散RDBMS: 分散トランザクションや分散整合性を扱う仕組み(例: Galera Cluster、Google Spanner など)。

分散環境ではCAP定理(Consistency, Availability, Partition tolerance)のトレードオフを考慮し、整合性を優先するか可用性を優先するかの設計判断が必要です。伝統的なRDBは一貫性(Consistency)を重視する設計が多い点が特徴です。

利点と欠点

主な利点:

  • 強力な整合性・トランザクションサポート(ACID)。
  • 豊富な標準(SQL)と成熟した運用ノウハウ。
  • 複雑な結合や集計を容易に行える。

主な欠点:

  • 水平スケールや超大規模分散環境での拡張が難しい場合がある。
  • スキーマ変更が運用負荷を伴うことがある(ただし最近のRDBMSではオンラインDDLなどの機能が改善)。
  • 柔軟なスキーマを前提とするユースケース(セミ構造化データ、大量のログ保存など)ではNoSQLやデータレイクが有利な場合がある。

RDBを選ぶ際のポイント

導入時には次を検討します。

  • 整合性要件(ACIDが必須か)。
  • 同時接続数とスループット、読み書き比率。
  • スケール戦略(垂直/水平)と運用コスト。
  • サポートするSQL機能や拡張機能(ストアドプロシージャ、JSONサポート、全文検索など)。
  • バックアップ・リカバリ、監査、可用性(フェイルオーバー)要件。

まとめ

RDBはデータの構造化と整合性を重視する多くの業務系システムの中心技術であり、トランザクション制御、参照整合性、SQLによる柔軟な問い合わせが強みです。一方で、スケーラビリティやスキーマの柔軟性を重視する場合はNoSQLや分散ストレージの検討が必要になります。目的(整合性重視か、スケール重視か)に応じて適切なデータ管理手法を選ぶことが重要です。

参考文献