RDB の基礎概念
RDB の基礎概念とは
RDB(Relational Database / リレーショナルデータベース)は、データを「テーブル(表)」の形式で管理するデータベースである。1970 年に Edgar F. Codd が提唱した関係モデルに基づいており、現在でもエンタープライズシステムのデータ管理において最も広く使われているデータベースの種類である。
RDB では、テーブル同士を「リレーション(関連)」で結びつけることで、複雑なデータ構造を表現できる。操作には SQL(Structured Query Language)を使用する。
なぜ SIer で重要か
SIer が開発する業務システムでは、ほぼ 100% と言ってよいほど RDB が使用されている。銀行の口座情報、自治体の住民情報、ECサイトの商品・注文情報など、業務データの永続的な保存と正確な管理が求められるシステムでは、RDB のデータ整合性保証が不可欠だからである。
SIer の開発者にとって、RDB の基礎概念を理解することは、テーブル設計書の読み書き、SQL の記述、アプリケーションからのデータアクセス実装など、あらゆる工程の前提知識となる。
基本概念
テーブル・行・列
RDB の最も基本的な構造はテーブル(表)である。
users テーブル
┌─────┬──────────┬──────────────────┬───────────┐
│ id │ name │ email │ dept_id │
├─────┼──────────┼──────────────────┼───────────┤
│ 1 │ 田中太郎 │ tanaka@example │ 10 │
│ 2 │ 鈴木花子 │ suzuki@example │ 20 │
│ 3 │ 佐藤次郎 │ sato@example │ 10 │
└─────┴──────────┴──────────────────┴───────────┘
| 用語 | 別名 | 説明 |
|---|---|---|
| テーブル | 表、リレーション | データの集合。1 つの概念(ユーザー、商品等)に対応 |
| 行(Row) | レコード、タプル | 1 件分のデータ |
| 列(Column) | カラム、属性 | データの項目(名前、メールアドレス等) |
主キー(Primary Key)
テーブル内の各行を一意に識別するための列(または列の組み合わせ)。主キーの値は重複してはならず、NULL(空)も許されない。
users テーブルの主キー: id 列
→ id = 1 の行は必ず 1 つだけ存在する
外部キー(Foreign Key)
他のテーブルの主キーを参照する列。テーブル間のリレーションを表現するために使用する。
users.dept_id → departments.id を参照
departments テーブル
┌─────┬──────────┐
│ id │ name │
├─────┼──────────┤
│ 10 │ 営業部 │
│ 20 │ 開発部 │
└─────┴──────────┘
外部キー制約を設定することで、存在しない部署 ID(例: dept_id = 99)を users テーブルに登録しようとするとエラーになる。これを 参照整合性 と呼ぶ。
リレーション(関連)
テーブル間の関係には以下の 3 種類がある。
| 関連の種類 | 説明 | 例 |
|---|---|---|
| 1 対 1 | 1 つの行が他のテーブルの 1 つの行と対応 | ユーザーとプロフィール |
| 1 対多 | 1 つの行が他のテーブルの複数の行と対応 | 部署とユーザー |
| 多対多 | 両方のテーブルの行が互いに複数と対応 | ユーザーとロール |
多対多の関連は、中間テーブル(関連テーブル)を使って表現する。
ACID 特性
RDB のトランザクション(一連の処理のまとまり)が満たすべき 4 つの性質を ACID 特性 と呼ぶ。
| 特性 | 英語 | 説明 |
|---|---|---|
| 原子性 | Atomicity | トランザクション内の処理はすべて成功するか、すべて失敗する |
| 一貫性 | Consistency | トランザクション前後でデータの整合性が保たれる |
| 独立性 | Isolation | 複数のトランザクションが互いに干渉しない |
| 永続性 | Durability | コミットされたデータは永続的に保存される |
例えば、銀行の振込処理では「A 口座から引き落とし」と「B 口座に入金」が一つのトランザクションになる。原子性により、引き落としだけ成功して入金が失敗するという状態は発生しない。
トランザクション
トランザクションは、一連のデータ操作をひとまとまりとして扱う仕組みである。
BEGIN ← トランザクション開始
UPDATE ... ← A 口座から引き落とし
UPDATE ... ← B 口座に入金
COMMIT ← すべての変更を確定
何か問題があった場合:
ROLLBACK ← すべての変更を取り消し
COMMIT はトランザクション内の変更をすべて確定する操作、ROLLBACK はすべて取り消す操作である。
SIer での使われ方
よく使われる RDB 製品
SIer の現場では以下の RDB 製品がよく使用される。
| 製品 | 特徴 |
|---|---|
| Oracle Database | エンタープライズ向けの定番。大規模案件で多い |
| PostgreSQL | OSS。コスト重視の案件で増加中 |
| MySQL | Web 系で人気。SIer でも小〜中規模案件で使用 |
| SQL Server | Microsoft 製。.NET 系の案件で多い |
設計書との関連
SIer のプロジェクトでは、RDB に関連する以下の設計書が作成される。
- ER 図 --- テーブル間のリレーションを図で表現
- テーブル定義書 --- 各テーブルのカラム名・型・制約を定義
- CRUD 図 --- どの機能がどのテーブルに対してどの操作を行うかを一覧化
これらの設計書を読み書きするためには、RDB の基礎概念の理解が前提となる。
まとめ
- RDB はデータをテーブル形式で管理し、テーブル間をリレーションで関連づけるデータベースである
- 主キーで行を一意に識別し、外部キーでテーブル間の関連を表現する
- ACID 特性によりデータの整合性が保証され、トランザクションで一連の処理を安全に実行できる
- SIer の業務システムではほぼ必ず RDB が使用されており、基礎概念の理解は必須である
- ER 図やテーブル定義書など、設計書の読み書きにも直結する知識である