データベース正規化の基本原則
第一正規形 (1NF)
テーブルの各カラムは分割不可能な原子値を持つ必要があります。
第二正規形 (2NF)
第一正規形を満たし、主キーが存在し、非キーカラムが主キーに完全依存している状態です。
第三正規形 (3NF)
第二正規形を満たし、非キーカラム間の推移的依存関係が存在しない状態です。
ストレージエンジンの詳細
主要ストレージエンジンの特性
InnoDBエンジン
- ACIDトランザクションをサポート
- 行レベルロックによる高並列性
- 外部キー制約のサポート
MyISAMエンジン
- トランザクション非サポート
- テーブルレベルロック
- 高速な読み込み性能
MEMORYエンジン
- データをメモリ上に保持
- ハッシュインデックスを採用
- 一時テーブルやキャッシュ用途に適す
インデックスの基本概念
インデックスはデータ検索を効率化するためのデータ構造です。
| メリット | デメリット |
|---|---|
| データ検索の効率化とI/Oコスト削減 | 追加の記憶領域を消費 |
| ソート処理のコスト削減 | データ更新時のオーバーヘッド増加 |
B+Treeインデックス構造
MySQLで最も一般的に使用されるインデックス構造です。
// B+Treeの基本構造を示す疑似コード
class BPlusTreeNode {
List<Key> keys;
List<Pointer> pointers;
boolean isLeaf;
}
class BPlusTree {
BPlusTreeNode root;
Value search(Key key) {
// 検索アルゴリズムの実装
}
}
インデックスの種類と特性
| 種類 | 説明 | 特徴 |
|---|---|---|
| 主キーインデックス | 主キーカラムに自動生成 | 一意性を保障 |
| ユニークインデックス | 重複値を防止 | 複数設定可能 |
| 通常インデックス | 汎用的な検索最適化 | 複数設定可能 |
トランザクション処理の基礎
ACID特性
- 原子性 (Atomicity): 全操作の完全な実行
- 一貫性 (Consistency): データ整合性の維持
- 独立性 (Isolation): 並行実行時の影響分離
- 持続性 (Durability): 変更結果の永続化
トランザクション分離レベル
| レベル | ダーティリード | 非再現リード | ファントムリード |
|---|---|---|---|
| Read Uncommitted | 発生 | 発生 | 発生 |
| Read Committed | 防止 | 発生 | 発生 |
| Repeatable Read | 防止 | 防止 | 発生 |
| Serializable | 防止 | 防止 | 防止 |
ロック機構の詳細
ロックの粒度による分類
- グローバルロック: データベース全体のロック
- テーブルロック: テーブル単位のロック
- 行ロック: 行単位の細粒度ロック
InnoDBの行ロックタイプ
- レコードロック: 単一行のロック
- ギャップロック: 範囲のロック
- ネクストキーロック: レコードとギャップの組み合わせ
MVCC (Multi-Version Concurrency Control)
複数バージョンのデータを維持することで、ブロックしない読み取りを実現します。
// MVCCの基本概念を示す疑似コード
class VersionChain {
List<DataVersion> versions;
DataVersion getVisibleVersion(Transaction tx) {
// 可視性判定ロジック
}
}
class DataVersion {
TransactionId createdBy;
Data data;
Pointer previousVersion;
}