Skip to content

データベース用語

定義: ACIDは、データベースのトランザクションが満たすべき4つの特性です。

なぜ重要なのか:

  • データの整合性: データの整合性が保証される
  • 信頼性: トランザクションが確実に実行される
  • 一貫性: データの一貫性が保たれる

ACIDの4つの特性:

  1. Atomicity(原子性): トランザクションはすべて成功するか、すべて失敗する
  2. Consistency(一貫性): トランザクション前後でデータの整合性が保たれる
  3. Isolation(分離性): 複数のトランザクションが同時に実行されても、互いに影響しない
  4. Durability(永続性): コミットされたトランザクションは永続的に保存される

使用例:

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

関連用語:

  • トランザクション
  • ロック
  • デッドロック

定義: トランザクションは、複数のデータベース操作を1つの単位として扱う仕組みです。

なぜ重要なのか:

  • データの整合性: すべての操作が成功するか、すべて失敗する
  • エラー処理: エラー時にロールバックできる
  • 一貫性: データの一貫性が保たれる

使用例:

await db.transaction(async (trx) => {
await trx('users').insert({ name: 'Alice' });
await trx('orders').insert({ userId: 1, amount: 100 });
// すべて成功した場合のみコミット
});

関連用語:

  • ACID
  • ロック
  • デッドロック

定義: インデックスは、データベースの検索速度を向上させるためのデータ構造です。

なぜ重要なのか:

  • 検索速度の向上: クエリの実行速度が大幅に向上する
  • パフォーマンス: アプリケーションのパフォーマンスが向上する
  • スケーラビリティ: 大量のデータでも高速に検索できる

使用例:

-- インデックスの作成
CREATE INDEX idx_user_email ON users(email);
-- インデックスを使用したクエリ
SELECT * FROM users WHERE email = 'alice@example.com';

関連用語:

  • クエリ最適化
  • フルテーブルスキャン
  • カーディナリティ

定義: 正規化は、データベースの設計において、データの重複を排除し、整合性を保つための手法です。

なぜ重要なのか:

  • データの整合性: データの重複が排除され、整合性が保たれる
  • ストレージの効率化: ストレージの使用量が削減される
  • 更新の容易さ: データの更新が容易になる

正規化のレベル:

  1. 第1正規形(1NF): 各セルに1つの値のみ
  2. 第2正規形(2NF): 部分関数従属を排除
  3. 第3正規形(3NF): 推移的関数従属を排除

関連用語:

  • デノーマライゼーション
  • リレーション
  • 外部キー

定義: デノーマライゼーションは、正規化されたデータベースを意図的に非正規化する手法です。

なぜ重要なのか:

  • パフォーマンスの向上: クエリの実行速度が向上する
  • JOINの削減: JOIN操作が削減される
  • 読み取り速度の向上: 読み取り速度が向上する

使用例:

-- 正規化されたテーブル
users (id, name, email)
orders (id, user_id, amount)
-- デノーマライゼーション後
orders (id, user_id, user_name, user_email, amount)

関連用語:

  • 正規化
  • パフォーマンス最適化
  • 読み取り最適化