# ch01 — DB とは / テーブル・行・列

Source: https://php-school.pages.dev/topics/db/ch01-what-is-db/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: データベース連携
Level: L4

Reference (official): https://www.php.net/manual/ja/book.pdo.php

## 本文

# ch01 — DB とは / テーブル・行・列

## 概要

DB (データベース) とは、**「表 (テーブル) の集まり」** として情報を保存する仕組み。表計算ソフトをイメージすると分かりやすく、列に「項目名」、行に「1 件 1 件のデータ」が並ぶ。1 行が **レコード**、1 項目が **カラム**、テーブルの設計図を **スキーマ** と呼ぶ。

「ファイルに JSON で書けばダメか?」は最初に必ず出る疑問。10 件なら JSON で十分だが、件数が増え複数人が同時に書き換え、「条件に合う行だけ」「集計したい」となると破綻する。DB は **検索の速さ** (インデックス) ・ **整合性** (型・制約) ・ **並行アクセス** (トランザクション・ロック) を最初から面倒見てくれる。

このトピックで扱う **リレーショナル DB (RDB)** は最も古典的な系統で、SQLite / MySQL / PostgreSQL がそのファミリー。複数テーブルを **キーで結びつける (リレーション)** ことで複雑なデータも素直に表現できる。この章は概念の絵を頭に作るだけで、手は ch02 から動かす。

## 学習目標

- DB が「表 (テーブル) の集まり」だと頭の中で絵にできる
- テーブル / 行 / 列 という用語を自分の言葉で説明できる
- なぜファイル保存ではなく DB を使うのか、その動機を 1 つ言える

## 所要時間

スライドのみ = **5 分**

## ドリル

**このチャプターにドリルはありません。** スライドを読み終わったら次の `ch02-pdo-connect/` に進んでください。

理由: ここでは概念の絵を頭に作るのが目的。手を動かすのは ch02 から (PDO で実際に DB に接続するところ) で行います。

## スライド

---
marp: true
theme: dojo
paginate: true
size: 16:9
---

<!--
LLM_CONTEXT:
  Lesson 11 / Chapter 1
  目的: DB とは何かのイメージを作る (テーブル / 行 / 列 / なぜ DB を使うか)
  扱わない: PDO 接続 (ch02) / SELECT (ch03) / WHERE (ch04) / INSERT (ch05) / SQL インジェクション (ch09)
  読み上げ時間目安: 4 分〜5 分
-->

# DB とは / テーブル・行・列

Lesson 11 / Chapter 1

---

## ファイルに保存するだけでは足りなくなる

```
users.txt
------------------------
1,太郎,20
2,花子,25
3,次郎,30
```

- 「20 歳以上の人だけ取り出したい」 → 自分で 1 行ずつ読んで判定するコードが必要
- 「花子の年齢を 26 に書き換えたい」 → 全行読み込んで該当行だけ書き換えて、もう一度全部書き戻す
- 複数人 (複数プロセス) が同時に書き込むと **データが壊れる**

→ こうした「探す・直す・同時に触る」を **安全に・速く** やってくれる仕組みが **DB** (データベース)。

---

## DB は「表 (テーブル)」の集まり

`users` テーブル:

| id | name | age |
|---|---|---|
| 1 | 太郎 | 20 |
| 2 | 花子 | 25 |
| 3 | 次郎 | 30 |

- 1 つの DB の中に、こういう **表 (テーブル)** がいくつも入っている
- 表計算ソフト (Excel / スプレッドシート) の 1 シートに近いイメージで OK

---

## 用語 3 つだけ覚える

| 用語 | 意味 | `users` テーブルでの例 |
|---|---|---|
| **テーブル (table)** | 1 つの表 | `users` 全体 |
| **行 (row / record)** | 横 1 本のデータ | `1, 太郎, 20` |
| **列 (column / field)** | 縦 1 列の項目 | `name` 列 (全員の名前) |

「1 行 = 1 人分のデータ」「1 列 = 全員に共通する項目 (名前・年齢など)」のイメージ。

---

## なぜ DB を使うのか

| やりたいこと | ファイルだと | DB だと |
|---|---|---|
| 条件で絞って取り出す | 1 行ずつ読んで判定 | `WHERE age >= 20` の 1 行 |
| 1 件だけ書き換える | 全部読み込んで全部書き戻す | `UPDATE ... WHERE id = 2` |
| 同時に複数人が触る | 壊れる | DB がロックして守ってくれる |
| 大量データから検索 | 全件スキャンで遅い | インデックスで速い |

→ **「探す・直す・同時に触る」を任せられる** のが DB の存在理由。

---

## このチャプターでできるようになること

✅ DB が「テーブル (表) の集まり」だと言える
✅ テーブル / 行 / 列 を自分の言葉で説明できる
✅ なぜ DB を使うのか (条件検索 / 部分更新 / 同時アクセス / 高速検索) を 1 つ言える

関連: ch02 で PHP から実際に DB に接続する
