6.

RDBMS 共通機能完全ガイド

編集
この記事の要点
  • RDBMS = Relational Database Management System。関係モデルでデータを管理
  • 共通機能: ACID トランザクション / Index / 制約 / View / Trigger / Stored Procedure
  • 標準言語 SQL (ISO/IEC 9075)。DDL / DML / DCL / TCL の 4 カテゴリ
  • 主要製品: Enterprise (Oracle / SQL Server / DB2) vs OSS (PostgreSQL / MySQL / MariaDB / SQLite)
  • 対比: NoSQL (柔軟スキーマ・分散) / NewSQL (ACID + 分散) / クラウドマネージド (RDS / Aurora / Cloud SQL)

RDBMS とは

RDBMS (Relational Database Management System、リレーショナルデータベース管理システム) は、1970 年に E. F. Codd が提唱した関係モデルに基づいてデータを管理するデータベースシステムです。データを行 (Row)列 (Column) から成るテーブル (Relation) で表現し、テーブル間の関連を外部キーで結びます。

1970 年代に IBM System R / Oracle が登場して以来 50 年以上にわたって企業システムの中核を担っており、現在も世界の構造化データの大半を保持しています。

関係モデルの基本概念

用語意味SQL での呼称
Relation (関係)属性の組合せの集合Table
Tuple (タプル)1 件のデータRow (行) / Record
Attribute (属性)項目Column (列)
Domain (定義域)属性の取り得る値の範囲Data type
Primary Keyレコード一意識別子PK
Foreign Key他テーブルの PK を参照FK

ACID トランザクション

RDBMS の信頼性の根幹となる 4 つの性質:

性質意味
Atomicity (原子性)全部成功 or 全部失敗。中途半端な状態にしない
Consistency (一貫性)制約を満たす状態から状態へ移る
Isolation (分離性)並行トランザクションが互いに干渉しない
Durability (永続性)COMMIT したら障害でも消えない

分離レベル

レベルDirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTED
READ COMMITTED×
REPEATABLE READ××
SERIALIZABLE×××

SQL: 4 つのカテゴリ

分類意味代表コマンド
DDLData Definition LanguageCREATE / ALTER / DROP / TRUNCATE
DMLData Manipulation LanguageSELECT / INSERT / UPDATE / DELETE / MERGE
DCLData Control LanguageGRANT / REVOKE
TCLTransaction Control LanguageCOMMIT / ROLLBACK / SAVEPOINT

Index (索引)

-- B-Tree インデックス (最も一般的)
CREATE INDEX idx_users_email ON users(email);

-- 複合インデックス
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);

-- ユニークインデックス
CREATE UNIQUE INDEX idx_users_email ON users(email);

-- 部分インデックス (PostgreSQL)
CREATE INDEX idx_active_users ON users(email) WHERE deleted_at IS NULL;

-- カバリングインデックス
CREATE INDEX idx_orders_cover ON orders(user_id) INCLUDE (amount, status);

-- 関数インデックス
CREATE INDEX idx_users_lower_email ON users(LOWER(email));

-- 各種インデックス
-- B-Tree   : 範囲検索, ソート
-- Hash     : 等価検索のみ
-- GiST/GIN : 全文検索, JSON, 地理空間 (PostgreSQL)
-- BRIN     : 巨大テーブル順序データ向け

制約

制約意味
PRIMARY KEY一意識別、NULL 不可
UNIQUE一意性、NULL 可
NOT NULLNULL 不可
FOREIGN KEY参照整合性
CHECK条件式チェック
DEFAULT既定値

View (ビュー)

-- 通常のビュー (実行時に SELECT)
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE deleted_at IS NULL;

-- マテリアライズドビュー (結果を実体化、定期リフレッシュ)
CREATE MATERIALIZED VIEW user_stats AS
SELECT user_id, COUNT(*) AS orders, SUM(amount) AS total
FROM orders GROUP BY user_id;

REFRESH MATERIALIZED VIEW user_stats;

-- 更新可能ビュー (条件を満たせば INSERT/UPDATE 可)
CREATE VIEW visible_users AS
SELECT * FROM users WHERE visibility = 'public'
WITH CHECK OPTION;  -- visibility != 'public' な INSERT を拒否

Trigger (トリガー)

-- PostgreSQL
CREATE OR REPLACE FUNCTION update_modified() RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER users_updated_at
BEFORE UPDATE ON users
FOR EACH ROW
EXECUTE FUNCTION update_modified();

-- MySQL
CREATE TRIGGER orders_log
AFTER INSERT ON orders
FOR EACH ROW
INSERT INTO order_log(order_id, ts) VALUES (NEW.id, NOW());

-- タイミング: BEFORE / AFTER / INSTEAD OF
-- イベント : INSERT / UPDATE / DELETE / TRUNCATE
-- 粒度    : FOR EACH ROW / FOR EACH STATEMENT

Connection Pool

DB 接続の確立は高コストなため、アプリは Connection Pool を使って接続を再利用します:

  • HikariCP (Java、最速とされる)
  • PgBouncer (PostgreSQL 専用、トランザクションプール)
  • ProxySQL (MySQL)
  • RDS Proxy (AWS マネージド)

Replication

方式説明
Master/Slave (Primary/Replica)書込はマスター、読込は両方
Multi-Master複数マスター書込可、衝突解決必要
Synchronous同期、データ損失ゼロ、性能影響あり
Asynchronous非同期、若干の遅延 / 損失可能性
Logical ReplicationSQL レベル、選択的レプリケーション
Physical ReplicationWAL / Redo レベル、全体コピー

Sharding (水平分割)

  • Range Sharding: user_id 1-1000 → shard1, 1001-2000 → shard2
  • Hash Sharding: hash(user_id) % N
  • Geo Sharding: 地域で分割
  • Vitess (MySQL), Citus (PostgreSQL), YugabyteDB, CockroachDB 等の自動シャーディング製品

主要 RDBMS の比較

製品ライセンス強み
Oracle Database商用 (高価)機能・性能・実績、PL/SQL
SQL Server商用 (Microsoft)Windows との統合、T-SQL
DB2商用 (IBM)メインフレーム、銀行系
PostgreSQLOSS (PostgreSQL License)標準準拠、拡張性、JSON / 地理空間
MySQLOSS / 商用 (Oracle)Web 系で圧倒的シェア、シンプル
MariaDBOSS (Fork from MySQL)MySQL 互換、独自エンジン (ColumnStore)
SQLiteOSS (Public Domain)組み込み、ファイルベース、世界一展開数

NoSQL / NewSQL との比較

カテゴリ得意不得意
RDBMSOracle, PostgreSQLACID, 集計, 関連スキーマ柔軟性, 巨大スケール
Document NoSQLMongoDB, Couchbase柔軟スキーマ, 開発速度結合, ACID (改善中)
Key-ValueRedis, DynamoDB超高速, シンプル複雑クエリ
Column FamilyCassandra, HBase書込スケール, 時系列結合, トランザクション
GraphNeo4jネットワーク解析大規模スループット
NewSQLCockroachDB, YugabyteDB, SpannerACID + 分散スケール運用複雑, コスト

CAP 定理

分散システムは Consistency (一貫性) / Availability (可用性) / Partition tolerance (分断耐性) の 3 つを同時に満たせない(2 つまで)。

  • CA: 単一ノード RDBMS (パーティションを想定せず)
  • CP: HBase, MongoDB (デフォルト), CockroachDB
  • AP: Cassandra, DynamoDB, Couchbase

クラウドマネージド

サービス提供元対応 DB
Amazon RDSAWSMySQL, PostgreSQL, Oracle, SQL Server, MariaDB
Amazon AuroraAWSMySQL/PostgreSQL 互換、独自ストレージで高性能
Cloud SQLGoogle CloudMySQL, PostgreSQL, SQL Server
Azure SQL DatabaseAzureSQL Server, MySQL, PostgreSQL
Azure Cosmos DBAzureマルチモデル NoSQL
Cloud SpannerGoogle Cloud分散 SQL、グローバル整合性

Backup と Restore

  • 論理バックアップ: mysqldump, pg_dump, exp/expdp
  • 物理バックアップ: ファイルコピー / Snapshot
  • 増分バックアップ: Redo / WAL アーカイブで差分
  • PITR (Point-in-Time Recovery): 任意時刻に戻す
  • RPO / RTO: 復旧時点目標 / 復旧時間目標を要件定義

FAQ

Q: RDBMS と NoSQL、どちらを選ぶべき?
A: トランザクション・複雑クエリが必要なら RDBMS、スキーマ柔軟性・水平スケールが必要なら NoSQL。両方使う「ポリグロット・パーシステンス」も一般的。

Q: PostgreSQL と MySQL、どちらが良い?
A: 標準準拠・機能豊富さなら PostgreSQL、Web シェア・シンプルさなら MySQL。新規プロジェクトは PostgreSQL が選ばれる傾向。

Q: SQL は将来も使われる?
A: 50 年使われ続けており、当面置換されません。NoSQL ですら多くが SQL 互換クエリ言語を持つようになっています (Cassandra CQL, MongoDB Aggregation など)。

Q: マネージド RDS と EC2 セルフホスト、どちらが良い?
A: 多くの場合マネージド推奨。バックアップ/パッチ/監視を AWS が代行。コスト感度が高くチームに専門家がいるならセルフホストも選択肢。

編集
Post Share
子ページ
  1. ONとWHEREの違い
同階層のページ
  1. Oracle
  2. MySQL & MariaDB
  3. DB2
  4. SQLite
  5. PostgreSQL
  6. RDBMS共通

最近更新/作成されたページ