📈

データベースの基本

2025/01/03に公開

はじめに

データベースは、情報を効率的に保存、管理、検索するための重要なシステムです。Webアプリケーションや業務システム、モバイルアプリまで、あらゆる分野でデータ管理の中核を担っています。
本記事では、データベースの基本概念から構成要素、設計手法に至るまでを分かりやすく解説します。データベースの基礎を学ぶことで、より効率的かつ信頼性の高いシステム設計が可能となります。


1. データベースとは?

データベースとは、データを体系的に整理し、効率よく保存・管理するための仕組みを指します。特にリレーショナルデータベース(RDB)は、表形式でデータを管理するシステムとして広く利用されています。

ファイル管理との違い

データベースとファイル管理には、以下のような違いがあります。

ファイル管理 データベース
データを手動で操作する(例:Excel) 専用のツールやSQLを使い効率的に操作
データ間の関係を定義できない データ間の関係を明確に管理できる
検索や集計が遅い 高速な検索や集計が可能

2. データベースの種類

データベースには様々な種類があり、それぞれの用途や特性に応じた使い分けが求められます。

2-1. リレーショナルデータベース(RDB)

  • 表形式でデータを保存し、テーブル間の関係(リレーション)を基に操作します。
  • 主キーや外部キーを用いてデータ間の関連性を定義します。

:MySQL、PostgreSQL、SQLite

例:リレーショナルデータベース

顧客テーブル

顧客ID 名前 住所
1 山田 東京
2 鈴木 大阪

注文テーブル

注文ID 顧客ID 注文日
101 1 2025-01-01
102 2 2025-01-02

2-2. NoSQL

  • JSONやキーバリュー形式など、柔軟なデータ形式を採用し、データを管理します。
  • 大量データや非構造化データに適しており、高速な読み書きが可能です。

:MongoDB(ドキュメント型), Redis(キー・バリュー型), Cassandra(列指向型)

例:NoSQL(JSON形式)

{
  "顧客ID": 1,
  "名前": "山田",
  "住所": "東京",
  "注文": [
    {"注文ID": 101, "注文日": "2024-01-01"},
    {"注文ID": 102, "注文日": "2024-01-02"}
  ]
}

3. データベースの構成要素

3.1 テーブル

テーブルは、データを行(レコード)と列(カラム)で構成された形式で保存する、データベースの基本単位です。

  • 例:
    テーブル名: users

    id name age email
    1 Taro 25 taro@example.com
    2 Hanako 30 hanako@example.com
  • ポイント

    • 行(Row/Record): 各データの1つの単位。
    • 列(Column/Field): データの属性を表す項目。(例: 名前、年齢、メールアドレス)
    • 主キー(Primary Key): 各行を一意に識別するためのカラム。

3.2 スキーマ

スキーマは、データベース構造を定義する設計図のようなものです。
スキーマには以下の内容が含まれます:

  • テーブルの名前

  • 各カラムのデータ型(例: INT, VARCHAR, DATE)

  • 制約(例: NOT NULL, UNIQUE, FOREIGN KEY)

  • 例:

  CREATE TABLE users (
      id INT PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(50) NOT NULL,
      age INT CHECK (age >= 0),
      email VARCHAR(100) UNIQUE
  );

3.3 インデックス

インデックスは、データの検索速度を向上させるための仕組みです。
本の索引のように、特定の値を高速に見つけることができます。
多用すると、書き込みの性能が低下するため、注意が必要です。

CREATE INDEX idx_email ON users (email);

3.4 ビュー

ビューは、特定のクエリ結果を仮想テーブルとして保存する機能です。
複雑なクエリを簡単に再利用できるようにします。

CREATE VIEW adult_users AS
SELECT * FROM users WHERE age >= 20;

4. SQLの基本構文

SQLStructured Query Language)とは、リレーショナルデータベース管理システム(RDBMS)でデータを定義、操作、制御、照会するためのプログラミング言語です。
SQL文とは、データベース操作を実行するための具体的なコマンドやクエリを指します。SQL文を使うことで、データの作成、読み取り、更新、削除などが可能です。

4.1 CRUD操作

CRUDは、データベース操作の基本となる4つの操作(Create, Read, Update, Delete)を指します。これらの操作はすべて、SQL文を使って実現されます。

Create(作成)
データベースに新しいデータを登録する操作を指します。
例: ユーザーが新しいアカウントを作成する際に、その情報をデータベースに保存する。

INSERT INTO users (name, age, email)
VALUES ('Taro', 25, 'taro@example.com'); 
-- 新しいユーザーをデータベースに追加します。

Read(読み取り)
データベースに保存されているデータを検索・取得する操作を指します。
例: ユーザーがプロフィール情報を閲覧する際に、データベースからその情報を取得する。

SELECT * FROM users WHERE age > 20; 
-- 20歳以上のユーザーを取得します。

Update(更新)
既存のデータを変更する操作を指します。
例: ユーザーが登録済みの名前や年齢、メールアドレスを変更する際に、データベースの情報を更新する。

UPDATE users SET age = 26 WHERE name = 'Taro';
-- 名前が「Taro」というユーザーの年齢を26歳に更新します。

Delete(削除)
データベースに保存されているデータを削除する操作を指します。
例: ユーザーがアカウントを削除する際に、データベースからそのデータを削除する。

DELETE FROM users WHERE name = 'Taro';
-- 名前が「Taro」というユーザーをデータベースから削除します。
CRUDの重要性

CRUDは、データベースの基本的な操作の枠組みであり、どのデータベース管理システム(DBMS)でも最も頻繁に使用される機能です。これらの操作を効率的に実現するためにデータベース設計やAPI設計が行われます。

4.2 テーブルの作成と構造変更

データベースでデータを保存するには、最初にテーブルを作成する必要があります。
作成後、要件の変更があった場合には、既存のテーブルを構造変更することも可能です。

4.2.1 テーブルの作成

テーブルを作成するには、CREATE TABLE文を使用します。
作成時には以下の要素を指定します。

  1. テーブル名
  • テーブルの一意の名前を指定します。
  1. カラム名とデータ型
  • 各カラム(列)の名前と、それに対応するデータ型を指定します。
  • 例: INT(整数型)、VARCHAR(n)(可変長文字列)、DATE(日付型)など。
  1. 制約(Constraints)
  • データの整合性を保つために設定します。

    • NOT NULL:
      カラムに NULL 値を許容しない制約です。必ず値を設定しなければならない項目に使用します。例えば、ユーザー登録時に名前やメールアドレスが空のまま登録されないようにする場合に使用します。
    • PRIMARY KEY:
      テーブル内で各行(レコード)を一意に識別するための制約です。PRIMARY KEYが設定されたカラムは、テーブル内で重複や NULL を許容しません。1つのテーブルに PRIMARY KEY は1つだけ設定可能です。
    • UNIQUE:
      特定のカラムに重複する値を許容しない制約です。ただし、NULL 値は許容されます。例えば、メールアドレスやユーザー名など、ユニークなデータが必要な場合に適用します。
    • FOREIGN KEY:
      他のテーブルとの参照関係を定義する制約です。外部キー制約により、参照元のテーブルに存在しない値を登録できなくなります。そのため、親子関係の管理に適しています。
    • CHECK:
      データに値の範囲や条件を設定する制約です。カラムの値が指定した条件を満たす場合のみ、データの挿入や更新を許可します。
  • 例:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    age INT CHECK (age >= 0),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4.2.2 テーブルの構造変更

既存のテーブルを変更するには、ALTER TABLE文を使用します。
構造変更には以下のような操作があります。

  1. カラムの追加
    新しいカラムをテーブルに追加します。
    例:電話番号を追加する場合
ALTER TABLE users ADD COLUMN phone VARCHAR(15);
  1. カラムの削除
    不要になったカラムを削除します。
ALTER TABLE users DROP COLUMN phone;
  1. カラムの変更
    カラムのデータ型や制約を変更します。
    例:名前の最大文字数を50から100に変更する場合
ALTER TABLE users MODIFY COLUMN name VARCHAR(100);
  1. カラム名の変更
    カラム名を変更します。(MySQLを使用する場合)
    DBMSによって異なります。
    例:ageをuser_ageに変更する場合
ALTER TABLE users CHANGE COLUMN age user_age INT;
  1. テーブル名の変更
    例:usersをcustomersに変更する場合
ALTER TABLE users RENAME TO customers;

5. トランザクション管理

5.1 トランザクションとは

トランザクションは、データベースにおける一連の操作(複数のクエリ)を1つの単位として扱う概念です。データベースにおける信頼性と整合性を保証する重要な機能であり、特に金融システムや在庫管理システムなど、データの正確性が求められるアプリケーションで欠かせない仕組みです。

5.2 トランザクションのACID特性

  1. Atomicity(原子性):
  • トランザクション内のすべての操作が成功するか、すべて無効になるかのどちらかを保証します。
  1. Consistency(一貫性):
  • トランザクションの実行前後で、データベースの整合性が保たれることを保証します。
  1. Isolation(独立性):
  • 複数のトランザクションが同時に実行される場合でも、互いに干渉しないことを保証します。
  1. Durability(永続性):
  • トランザクションが完了した後、その変更がデータベースに永続的に保存されることを保証します。

例:銀行振込システム

BEGIN;
-- 送金元の口座から10,000円を引き落とされます。
UPDATE accounts SET balance = balance - 10000 WHERE account_id = 1;

-- 送金先の口座に10,000円を加算されます。
UPDATE accounts SET balance = balance + 10000 WHERE account_id = 2;

-- すべての操作が成功した場合、確定します。コミット後の変更はデータベースに永続的に保存されます。
COMMIT;

-- どちらかの操作が失敗したら、トランザクション内のすべての操作を取り消します。これにより、データベースはトランザクション開始前の状態に戻ります。
ROLLBACK;

6. 正規化(Normalization)

データベース設計の基礎となる概念で、データの冗長性を排除し、整合性を保つための段階的なルールを指します。正規化は、データの重複や矛盾を防ぎ、効率的で保守性の高いデータベースを構築するために不可欠なプロセスです。

6.1 正規化の目的

  1. データの冗長性を排除
  • 同じデータが複数箇所に保存されると、更新や削除の際に矛盾が生じる可能性があります。
    正規化によってこのような冗長性を防ぎます。
  1. データの整合性を確保
  • 変更や削除の際、関連するデータを正しく更新することで矛盾を防ぎます。
  1. データ操作を効率化
  • データの検索や更新が容易になり、パフォーマンスが向上します。

6.2 正規形

正規形は、データベースの構造を整理するための段階的なルールであり、各段階で特定の課題を解決するために体系的に整理されています。

  1. 第1正規形(1NF: First Normal Form)
  • 要件:すべてのカラムに単一の値を持たせ、繰り返し要素や複数の値を排除します。
  • 目的:データを「原子化」すること。つまり、各セルには単一の値のみを持つようにデータを整理します。
  1. 第2正規形(2NF: Second Normal Form)
  • 要件:第1正規形を満たしていることに加え、主キーの一部にのみ依存するカラム(部分関数従属)を排除します。
  • 目的:各非キー属性が主キー全体に対して完全に依存するようにします。これにより、1つのテーブルに複数のテーマを持たないようにします。
  1. 第3正規形(3NF: Third Normal Form)
  • 要件:第2正規形を満たしていることに加え、非キー属性が他の非キー属性に依存しないようにします(推移的関数従属の排除)。
  • 目的:1つのテーブル内に複数のテーマが混在することを防ぎます。非キー属性が独立して管理されることで、データの変更時に矛盾が生じる可能性を低減します。

7. まとめ

本記事では、データベースの基本的な概念、構成要素、設計手法について解説しました。これらの知識を活用して、効率的で信頼性の高いデータベース設計を行うことが可能になります。

参考:
https://www.shoeisha.co.jp/book/detail/9784798185330
https://envader.plus/article/57
https://www.youtube.com/watch?v=Obc5ergmzx0

Discussion