📖 読了目安 約11分
この記事の目次

データベースの基礎

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

データベースとは

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

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

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

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

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

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

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

データベースの種類

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

最も広く使われているデータベースです。

データを「テーブル(表)」形式で管理します。

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

代表的なRDB

製品 特徴
MySQL Webサービスで広く使用、オープンソース
PostgreSQL 高機能、オープンソース
Oracle Database 大企業で使用、商用
SQL Server Microsoft製、.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対1 1件に対して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の基礎 を参照してください。