第8章 設計と運用

更新日:2025年12月28日

🎧

この章を音声で聴く

再生速度:
本章では、データベースの設計と運用について解説する。ER図(Entity-Relationship Diagram)によるデータモデリング、テーブル設計の実践、ACID特性とトランザクション管理、ロックと並行制御、バックアップとリカバリについて学ぶ。これらの知識は、信頼性の高いデータベースシステムを構築・運用するための基盤となる。

1. ER図

ER図(Entity-Relationship Diagram)は、データベースの論理構造を視覚的に表現するための図である。Peter Chenが1976年に提唱した。

1.1 エンティティと属性

エンティティ(Entity):データベースで管理する対象。テーブルに対応する。

属性(Attribute):エンティティの特性。テーブルの列に対応する。

Table 1. ER図の基本要素

要素 記号(Chen記法) 記号(IE記法) 説明
エンティティ 長方形 長方形 管理対象(例:顧客、商品)
属性 楕円 長方形内に列挙 エンティティの特性(例:氏名、価格)
主キー 下線付き属性 PK表記 一意識別子
リレーションシップ 菱形 線(カーディナリティ記号付き) エンティティ間の関連

1.2 リレーションシップ

リレーションシップは、エンティティ間の関連を表す。カーディナリティ(多重度)で関連の数量関係を示す。

Table 2. カーディナリティの種類

種類 記号 説明
1対1 1:1 一方に1つ、他方にも1つ 社員と社員証
1対多 1:N 一方に1つ、他方に複数 部署と社員
多対多 M:N 両方に複数 学生と講義

Fig. 1. ER図の例(受注システム)

ER図(受注システム)
受注システムのER図。顧客が注文を行い、注文明細で商品と紐付ける。
多対多の解消
多対多(M:N)の関係は、RDBでは直接表現できない。中間テーブル(連関エンティティ)を作成し、2つの1対多(1:N)に分解する。例:学生-受講-講義
-- 多対多の解消例
-- 学生テーブル
CREATE TABLE students (
    student_id INTEGER PRIMARY KEY,
    name VARCHAR(100)
);

-- 講義テーブル
CREATE TABLE courses (
    course_id INTEGER PRIMARY KEY,
    title VARCHAR(200)
);

-- 中間テーブル(受講)
CREATE TABLE enrollments (
    student_id INTEGER,
    course_id INTEGER,
    enrolled_date DATE,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(student_id),
    FOREIGN KEY (course_id) REFERENCES courses(course_id)
);

2. テーブル設計

テーブル設計は、ER図を基にして具体的なテーブル構造を決定するプロセスである。

Table 3. テーブル設計のチェックリスト

項目 確認内容
主キー 一意性、非NULL、変更されにくい値か
正規化 第3正規形まで正規化されているか
データ型 適切なデータ型と桁数が選択されているか
制約 NOT NULL、UNIQUE、CHECK制約が適切か
外部キー 参照整合性が確保されているか
命名規則 一貫性のある命名がされているか
インデックス 検索性能を考慮したインデックスがあるか

Table 4. 命名規則の例

対象 規則
テーブル名 複数形、スネークケース employees, order_details
列名 スネークケース first_name, created_at
主キー テーブル名_id または id employee_id, id
外部キー 参照先テーブル名_id department_id
インデックス idx_テーブル名_列名 idx_employees_name

3. トランザクション

3.1 ACID特性

トランザクション(Transaction)は、データベース操作の論理的な単位である。複数の操作を一つのまとまりとして扱い、すべて成功するか、すべて失敗するかのいずれかを保証する。

Table 5. ACID特性

特性 英語 説明
原子性 Atomicity トランザクション内の操作はすべて成功するか、すべて失敗する
一貫性 Consistency トランザクション前後でデータの整合性が保たれる
独立性 Isolation 同時実行される他のトランザクションの影響を受けない
耐久性 Durability コミット後のデータは永続的に保存される
-- トランザクションの基本
BEGIN TRANSACTION;  -- または START TRANSACTION;

-- 銀行振込の例
UPDATE accounts SET balance = balance - 10000 WHERE account_id = 'A001';
UPDATE accounts SET balance = balance + 10000 WHERE account_id = 'B001';

-- 成功時
COMMIT;

-- 失敗時(ロールバック)
ROLLBACK;

-- セーブポイントの使用
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 10000 WHERE account_id = 'A001';
SAVEPOINT sp1;
UPDATE accounts SET balance = balance + 10000 WHERE account_id = 'B001';
-- エラー発生時、sp1まで戻す
ROLLBACK TO sp1;
COMMIT;

3.2 ロック

ロック(Lock)は、複数のトランザクションが同時にデータにアクセスする際の競合を制御する仕組みである。

Table 6. ロックの種類

ロック種類 別名 説明 他の読み取り 他の書き込み
共有ロック Sロック、読み取りロック 読み取り用 不可
排他ロック Xロック、書き込みロック 書き込み用 不可 不可

Table 7. トランザクション分離レベル

分離レベル ダーティリード ノンリピータブルリード ファントムリード
READ UNCOMMITTED 発生する 発生する 発生する
READ COMMITTED 防止 発生する 発生する
REPEATABLE READ 防止 防止 発生する
SERIALIZABLE 防止 防止 防止
デッドロック
デッドロックは、複数のトランザクションが互いにロックを待ち合う状態である。DBMSは通常、デッドロックを検出し、一方のトランザクションを強制終了する。デッドロックを防ぐには、ロック取得の順序を統一する、トランザクションを短くする、タイムアウトを設定するなどの対策がある。

4. バックアップ

バックアップは、データの損失に備えてデータベースの複製を作成することである。障害発生時のリカバリに不可欠である。

Table 8. バックアップの種類

種類 説明 メリット デメリット
フルバックアップ データベース全体を複製 リストアが簡単 時間とストレージを消費
差分バックアップ 前回のフルバックアップ以降の変更 バックアップが高速 リストアにフル+差分が必要
増分バックアップ 前回のバックアップ以降の変更 最も高速、省スペース リストアが複雑
# MySQLのバックアップ
mysqldump -u root -p database_name > backup.sql

# MySQLのリストア
mysql -u root -p database_name < backup.sql

# PostgreSQLのバックアップ
pg_dump -U postgres database_name > backup.sql

# PostgreSQLのリストア
psql -U postgres database_name < backup.sql

# SQLiteのバックアップ(ファイルコピー)
cp database.db backup.db

バックアップ運用の指針

Point 1:定期的なバックアップスケジュールを設定する(例:日次フル、時間ごとの増分)

Point 2:バックアップファイルを複数の場所に保管する(3-2-1ルール:3つのコピー、2種類のメディア、1つはオフサイト)

Point 3:定期的にリストアテストを実施し、バックアップの有効性を確認する

Point 4:バックアップの保持期間を決め、古いバックアップを削除する

5. まとめ

Table 9. 第8章のまとめ

概念 内容
ER図 エンティティ、属性、リレーションシップの視覚化
カーディナリティ 1:1、1:N、M:N(多対多は中間テーブルで解消)
テーブル設計 正規化、命名規則、制約の設定
ACID特性 原子性、一貫性、独立性、耐久性
トランザクション BEGIN、COMMIT、ROLLBACK、SAVEPOINT
ロック 共有ロック、排他ロック、デッドロック
分離レベル READ UNCOMMITTED〜SERIALIZABLE
バックアップ フル、差分、増分、リストアテスト
参考・免責事項
本コンテンツは2025年12月時点の情報に基づいて作成されています。データベースの設計と運用は要件により大きく異なります。本番環境での運用は十分なテストと専門家のレビューを経て行ってください。