第2部:基礎知識 / 第5章:データベース

データベースの基礎

多くのシステムで使用されるデータベースの基礎知識と目的を学びます。

📖 読了目安 約15分 対象:データベースの基本を学びたい全ての方

データベースとは

データベースとは、データを効率的に保存・管理・検索するためのシステムです。

なぜデータベースが必要か

ファイル(Excel、テキストファイル等)でデータを管理すると、こんな問題が起きます。

問題説明
同時アクセス複数人が同時に編集すると壊れる
データの整合性不正なデータが入りやすい
検索の効率大量のデータから探すのが遅い
セキュリティアクセス制御が難しい
バックアップ復旧が難しい

データベースは、これらの問題を解決するために設計されています。

データベースで解決できること

機能説明
同時アクセス制御複数人が同時に操作しても整合性を保つ
データの整合性不正なデータを防ぐ制約を設定できる
高速な検索インデックスで高速に検索
セキュリティユーザーごとにアクセス権限を設定
バックアップ・復旧データの保護と復旧が容易
トランザクション複数の操作をまとめて成功/失敗を保証

データベースの種類

リレーショナルデータベース(RDB)

最も広く使われているデータベースです。データを「テーブル(表)」形式で管理します。

ユーザーテーブル
+----+----------+---------------------+
| id | name     | email               |
+----+----------+---------------------+
| 1  | 田中太郎 | tanaka@example.com  |
| 2  | 山田花子 | yamada@example.com  |
+----+----------+---------------------+

代表的なRDB

製品特徴
MySQLWebサービスで広く使用、オープンソース
PostgreSQL高機能、オープンソース
Oracle Database大企業で使用、商用
SQL ServerMicrosoft製、.NET環境で使用
SQLiteファイルベース、組み込み用途

操作言語:SQL(Structured Query Language)

NoSQLデータベース

RDB以外のデータベースの総称です。

種類特徴代表例
ドキュメント型JSONのような形式でデータを保存MongoDB
キーバリュー型キーと値のペアでデータを保存Redis
グラフ型関係性を持つデータに特化Neo4j
列指向型大量データの分析に特化Cassandra

NoSQLの用途

  • 大量データの高速処理
  • 柔軟なデータ構造
  • 分散処理が必要な場合

ポイント

1年目はまずRDBを理解しましょう。多くの業務システムはRDBを使用しています。

データベースの構造

データベースには階層構造があります。よく混同されやすい「データベース」「スキーマ」「テーブル」の違いを理解しましょう。

データベース・スキーマ・テーブルの関係

データベースサーバー
└── データベース(Database)
    └── スキーマ(Schema)
        └── テーブル(Table)
            ├── 列(Column)
            └── 行(Row)
用語説明
データベースサーバーデータベースを動かすソフトウェアMySQL、PostgreSQL
データベースデータのまとまり、1つのシステム用の箱ECサイト用DB、社内システム用DB
スキーマテーブルをグループ化する名前空間public、sales、inventory
テーブル実際にデータを保存する表users、orders、products

製品ごとの違い

「スキーマ」と「データベース」の扱いは製品によって異なります。

製品特徴
MySQLスキーマ = データベース(同じ意味で使う)
PostgreSQLデータベース > スキーマ > テーブル の階層構造
Oracleスキーマ = ユーザー(ユーザーごとにスキーマを持つ)
SQL Serverデータベース > スキーマ > テーブル の階層構造

ポイント

現場で「スキーマ」という言葉が出てきたら、その製品での意味を確認しましょう。

実際の例

[ECサイトのデータベース構成例]

ecsite_db(データベース)
├── public(スキーマ)
│   ├── users(テーブル)
│   ├── products(テーブル)
│   └── orders(テーブル)
└── analytics(スキーマ)
    ├── access_logs(テーブル)
    └── sales_reports(テーブル)

リレーショナルデータベースの基本概念

テーブル(Table)

データを保存する「表」です。

注文テーブル(orders)
+----+---------+--------+------------+
| id | user_id | amount | created_at |
+----+---------+--------+------------+
| 1  | 1       | 3000   | 2024-01-01 |
| 2  | 2       | 5000   | 2024-01-02 |
| 3  | 1       | 2000   | 2024-01-03 |
+----+---------+--------+------------+
用語説明
行(レコード/Row)1件のデータ
列(カラム/Column)データの項目(id、name など)
フィールド1つのセル(特定の行の特定の列の値)

主キー(Primary Key)

各レコードを一意に識別するための列です。

id = 1 のユーザー → 必ず1人だけ特定できる
  • 重複できない
  • NULLにできない
  • 通常は id という名前の連番

外部キー(Foreign Key)

他のテーブルとの関連を示す列です。

users テーブル
+----+----------+
| id | name     |
+----+----------+
| 1  | 田中太郎 |
| 2  | 山田花子 |
+----+----------+

orders テーブル
+----+---------+--------+
| id | user_id | amount |
+----+---------+--------+
| 1  | 1       | 3000   |  ← user_id = 1 は「田中太郎」を指す
| 2  | 2       | 5000   |
+----+---------+--------+
    ↑
    外部キー(usersテーブルのidを参照)

リレーション(関連)

テーブル間の関係を「リレーション」と呼びます。

関係の種類説明
1対11件に対して1件ユーザーとプロフィール
1対多1件に対して複数件ユーザーと注文
多対多複数件に対して複数件商品とカテゴリ

データベースの操作

CRUD

データベースの基本操作は4つです。

操作意味SQL
Create作成(追加)INSERT
Read読み取り(検索)SELECT
Update更新UPDATE
Delete削除DELETE

SQLとは

SQL(Structured Query Language)は、RDBを操作するための言語です。

-- データを取得する
SELECT * FROM users WHERE id = 1;

-- データを追加する
INSERT INTO users (name, email) VALUES ('鈴木', 'suzuki@example.com');

SQLの詳細は SQLの基礎 を参照してください。

トランザクション

トランザクションとは

複数の操作をひとまとまりとして扱う仕組みです。

なぜ必要か

例:銀行の振込処理

1. Aさんの口座から1万円を引く
2. Bさんの口座に1万円を足す

もし1の後にエラーが起きたら、Aさんのお金だけ消えてしまいます。

トランザクションを使えば:

  • 両方成功する:変更が確定(コミット)
  • 途中で失敗する:変更を元に戻す(ロールバック)

ACID特性

トランザクションが満たすべき4つの特性:

特性説明
Atomicity(原子性)全部成功か全部失敗のどちらか
Consistency(一貫性)データの整合性が保たれる
Isolation(分離性)他のトランザクションに影響されない
Durability(永続性)確定したデータは失われない

インデックス

インデックスとは

検索を高速化するための仕組みです。本の索引のようなものです。

インデックスなし:
全データを1件ずつ確認 → 遅い

インデックスあり:
索引から目的のデータを特定 → 速い

インデックスのトレードオフ

メリットデメリット
検索が速くなるデータ追加・更新が遅くなる
ディスク容量を使う

ポイント

インデックスの設計は専門的な知識が必要です。1年目は「検索を速くする仕組みがある」ことを知っておけばOKです。

データベース設計の基本

正規化

データの重複を減らす設計手法です。

悪い例(重複がある):
+----+----------+----------+--------+
| id | 商品名   | カテゴリ | 価格   |
+----+----------+----------+--------+
| 1  | りんご   | 果物     | 100    |
| 2  | みかん   | 果物     | 80     |
| 3  | にんじん | 野菜     | 120    |
+----+----------+----------+--------+
↑ 「果物」「野菜」が重複している

良い例(テーブルを分ける):
商品テーブル
+----+----------+-------------+--------+
| id | 商品名   | category_id | 価格   |
+----+----------+-------------+--------+
| 1  | りんご   | 1           | 100    |
| 2  | みかん   | 1           | 80     |
| 3  | にんじん | 2           | 120    |
+----+----------+-------------+--------+

カテゴリテーブル
+----+----------+
| id | 名前     |
+----+----------+
| 1  | 果物     |
| 2  | 野菜     |
+----+----------+

正規化のメリット

  • データの重複を減らせる
  • 更新時の整合性を保ちやすい

1年目エンジニアが意識すること

まず覚えること

  1. テーブル・行・列の概念
  2. 主キーと外部キーの意味
  3. SQLの基本(SELECT、INSERT、UPDATE、DELETE)
  4. トランザクションの概念

本番データベースの注意点

  • 本番環境でのUPDATE、DELETEは特に注意
  • 必ずWHERE句を付ける
  • 実行前にSELECTで対象を確認
  • 迷ったら先輩に確認

危険なSQL

-- 危険!全レコードが削除される
DELETE FROM users;

-- 危険!全レコードが更新される
UPDATE users SET status = 'inactive';

まとめ

概念説明
データベースデータを効率的に管理するシステム
RDBテーブル形式でデータを管理、SQLで操作
テーブルデータを保存する表
主キーレコードを一意に識別する列
外部キー他のテーブルとの関連を示す列
トランザクション複数の操作をまとめて成功/失敗を保証
インデックス検索を高速化する仕組み

SQLの詳細は SQLの基礎 を参照してください。