データベースとは何か — ファイルとの違い・テーブルと SQL

この記事は、プログラミングやバイブコーディングをする上で最低限身につけたほうがよい IT の実践的な知識を 1 から身につける「IT 基礎知識講座の一部」です。
探す・同時に書く・形を決めるの 3 つを引き受けるのがデータベースです。行と列でできたテーブルと、読み書きを指示する SQL を図解で確かめます。

この記事は、データベース層、つまりデータベースを扱います。

データベースは、データを検索・更新できる形で保存するソフトウェアです。

ファイルとの違いは記録を置く場所ではなく、探す処理と書き込みの整理まで引き受けていることです。

入門書の手順の語と、データベース・テーブル・SQL の位置
===データベースに保存するテーブルを作るSQL を書くデータベーステーブルSQLDB 層のソフトウェアデータベースの中にある表AP 層から送る指示
上段が手順に出てくる語、中段がこの記事で扱う 3 つ、下段が 3 層モデルでの位置。二重線で結んだ 2 つは、言い方が違うだけで同じものです。

データベースは、ファイルと何が違うか — 探す・同時に書く・形を決める

データベースは、記録を保存するだけの入れ物ではありません。

条件に合う行を探すこと、同時に届いた書き込みを順番に処理すること、記録の形をそろえることの 3 つを引き受けます。

同じ時刻に届いても、書き込みは 1 件ずつ順番に処理されます。

ファイルに直接書く場合は、この順番を自分のプログラムで決めることになります。

同じ役割を、ファイルの場合とデータベースの場合で誰が持つか
===条件に合う記録を探す同時の書き込みを整理する記録の形をそろえる自分のプログラムが全体を読んで選ぶ自分で順番を決めておく書く側が気を付けるデータベースが合う行だけ返すデータベースが順番に処理する合わない行を断る件数が増えると遅くなる同時に書くと片方が消える形の違う記録が混ざる
左列が役割、中の 2 列がファイルの場合とデータベースの場合。右端が、自分で持ったときに起きやすいことです。

よく使われるデータベースは PostgreSQL・MySQL・SQLite です。

設定のように 1 人で書き換える記録は、ファイルのままで問題ありません。

複数の人が同時に読み書きし、条件で探し出す記録が、データベースに置くものです。

データベースは 3 つの作業を引き受ける

ファイルもデータベースも記録はストレージに残り、違うのは探す作業と、同時に書かれたときの順番と、記録の形をそろえることを誰がやるかです。

ファイルなら自分のプログラムが全部やり、データベースならこういう記録が欲しいと伝えるだけで済んで、形の合わない行は断ってもらえます。

テーブルは、行と列の表の形で記録を保存する

データベースの中で記録を保存する単位がテーブル(table。行と列でできた表の形で、同じ種類の記録をまとめたもの)です。

予約 ID会員 ID日付人数
1122026-10-032
272026-10-034
3122026-10-103

見出しの 1 つ 1 つが(column。記録の 1 項目)、その下の横 1 本が(row。1 件分の記録。レコードとも呼びます)です。

行を 1 件に特定するための列が主キー(primary key。同じ値の行を 2 つ作れない列)です。

列は先に決めておき、記録が 1 件増えるたびに行が 1 本ずつ増えます。

予約アプリのデータベースの中身
予約アプリのデータベース
予約テーブル
  • 列: 予約 ID・会員 ID・日付・人数
  • 1 行 = 予約 1 件
  • 予約が入るたびに行が増える
会員テーブル
  • 列: 会員 ID・名前・メールアドレス
  • 1 行 = 会員 1 人
  • 会員が登録するたびに行が増える
外枠がデータベース 1 つ。中の 2 つがテーブルで、それぞれの箇条書きが列の名前と、1 行が表すもの。

予約テーブルには会員の名前を書かず、会員 ID だけを置きます。

名前は会員テーブルの 1 か所にだけあるので、変わっても直す行は 1 つです。

1 件の申し込みが、2 つのテーブルに分かれて入る
佐藤さんの申し込み10/03・2 人名前とメールは会員テーブルへ日付と人数は予約テーブルへ会員テーブル会員 ID 12・佐藤予約テーブル予約 ID 1・会員 ID 12同じ会員 ID
左の 1 件が上下に分かれ、それぞれ別のテーブルの行になります。右端の 2 つは会員 ID 12 という同じ値を持つので、予約の行から名前をたどれます。

行と列の表の形でデータを持つのがリレーショナルデータベース(relational database。RDB とも書きます)で、共通の列でテーブルどうしを結び付けて使えます。

テーブルを作る前に決めておくものがスキーマ(schema。テーブルの名前、列の名前、各列に入る値の種類を決めたもの)で、値の種類は数値・文字・日付のような区別を指し、型(type)とも書かれます。

テーブルは、列を先に決めて行を増やす表

テーブルは、縦の列と横の行でできた表です。

列の名前は先に決めておき、記録が 1 件増えるたびに行が 1 本増え、1 件を見分けるための主キーの値を別のテーブルにも置くと、2 つがつながります。

SQL は、アプリケーションサーバー層がデータベースに送る読み書きの指示の書き方

テーブルへの読み書きを指示する書き方がSQL(Structured Query Language。行の読み出し・追加・書き換え・削除を指示する言語)で、1 つの指示をクエリ(query)と呼びます。

入門書には次の形で出てきます。

SELECT date, guests
FROM reservations
WHERE member_id = 12;

SELECT の後ろが取り出す列、FROM の後ろがテーブル、WHERE の後ろが条件です。

この 3 行は、予約テーブルから会員 ID が 12 の行の日付と人数を取り出す指示です。

先頭の語を見れば、読み出し・追加・書き換え・削除のどれかが分かります

先頭の語で、データベースがすることが決まる
SELECT ...WHERE member_id= 12INSERT INTOreservations ...UPDATE ...SET guests = 4DELETE FROMreservations ...会員 ID が 12 の行を選ぶ予約テーブルに1 行足す合う行の人数を書き換える合う行を消す日付と人数が2 行返る行が 1 つ増える2 が 4 になる行が 1 つ減る
左が送ったクエリの先頭、真ん中がデータベースがすること、右が返るものと残るものです。行が増減するのは下の 3 つで、いちばん上だけ読み出しです。

行を探すのはデータベースで、アプリケーションサーバー層はどの行が欲しいかを伝えるだけです。

書き換えと削除では、返る行ではなくテーブルに残る行が変わります。

SQL を書かずに言語の書き方でテーブルを扱えるようにする部品がORM(Object-Relational Mapping。言語の書き方でテーブルの行を扱い、SQL に変換して送る部品)です。

SQL を直接書いても、ORM で書いても、届くものは同じ
SQL を直接書くそのまま送られるORM の書き方で書くORM が SQL に変換するデータベースに届く1 つの SQL のクエリ
上と下で自分が書く行は違いますが、右端で 1 つに合流します。データベースが受け取るのは、どちらも SQL のクエリです。

ORM を使っていても、届いているのは SQL のクエリです。

SQL を自分で書いて動かすのは、SQL 入門講座の SELECT の記事で扱います。

SQL は、欲しい行を伝える書き方

SQL は、データベースに読み書きを頼むときの書き方です。

先頭の語で読み出す・足す・書き換える・消すのどれかが決まり、どの行が対象かは条件で伝えて、探す作業はデータベースがやります。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1予約の記録をファイルではなくデータベースに置く理由として、この記事で挙げた違いはどれですか。

Q2SELECT date, guests FROM reservations WHERE member_id = 12; というクエリは、何を指示していますか。

Q3予約テーブルに会員の名前ではなく会員 ID を入れるのは、なぜですか。