データベースを作成しただけでは、まだデータを保存することはできません。データベースという大きな「ファイルキャビネット」の中に、具体的な情報を整理して入れるための「仕切り付きの棚」、すなわち「テーブル」を作成する必要があります。
このテーブルをどのように作るか(テーブル設計)は、アプリケーションの性能や将来の拡張性に大きく影響する、非常に重要な工程です。
この記事では、テーブル設計の基本的な考え方を学び、phpMyAdminを使って実際にテーブルを作成し、最初のデータを登録するまでの手順を解説します。
1. テーブル設計の基本概念
テーブルは、Excelなどのスプレッドシートをイメージすると理解しやすいです。
- テーブル (Table): スプレッドシートの「シート」そのもの。特定のテーマに沿ったデータの集まりです。(例:
reviews
テーブル) - カラム (Column): シートの「列」。テーブルにどのようなデータを保存するかの項目を定義します。(例:
書籍名
,評価
) - レコード (Record) / 行 (Row): シートの「行」。一行で一件分の具体的なデータを表します。(例: ある一冊の本に対するレビューデータ)
最初に「どのような情報を保存したいか」を考え、それに基づいて必要なカラムを洗い出すことが、テーブル設計の第一歩です。
カラムの「データ型」を決める
データベースでは、各カラムに「どのような種類のデータを入れるか」をデータ型として厳密に定義する必要があります。これにより、データの整合性を保ち、効率的にデータを管理できます。
初心者がまず覚えておきたい、代表的なデータ型は以下の通りです。
- INT: 整数を格納します。(例: ユーザーID、商品の価格)
- VARCHAR: 可変長の文字列を格納します。最大文字数を指定する必要があります。(例: ユーザー名、本のタイトル)
- TEXT: 長い文章を格納します。最大文字数の指定は不要です。(例: ブログの本文、レビューの詳細)
- TIMESTAMP: 日付と時刻を格納します。データの作成日時や更新日時によく使われます。
主キーとオートインクリメント
テーブル設計において、特に重要なのが「主キー(Primary Key)」です。
- 主キー: 各レコードを一意に識別するためのカラムです。学籍番号や社員番号のように、絶対に重複しない値が入るカラムを主キーに指定します。これにより、データの重複を防ぎ、特定のレコードを高速に検索できます。
通常、主キーにはid
という名前のINT型のカラムを用意し、「オートインクリメント(Auto Increment)」という設定を施します。これは、新しいレコードが追加されるたびに、データベースが自動で「1, 2, 3…」と連番を振ってくれる便利な機能です。
2. 実践!phpMyAdminでテーブルを作成する
それでは、「読書記録」を保存するためのreviews
テーブルを設計し、phpMyAdminで作成してみましょう。
reviews
テーブルの設計図:
カラム名 | データ型 | 特徴 |
id | INT | 主キー、オートインクリメント |
book_title | VARCHAR(255) | 書籍名(最大255文字) |
rating | INT | 評価(1〜5の数字) |
review_text | TEXT | 感想文 |
created_at | TIMESTAMP | 登録日時(自動で現在日時が入る) |
作成手順:
- データベースを選択: phpMyAdminの左側メニューから、前回作成した
my_first_db
をクリックします。 - テーブル作成画面を開く: 「テーブルを作成」という画面で、名前の欄に「reviews」と入力し、「作成」ボタン(または「実行」ボタン)をクリックします。
- カラムを定義する:
id
カラム:- 名前:
id
- 型:
INT
- 右の方にある「A_I」のチェックボックスをオンにします。(これがオートインクリメントの設定です)
- インデックス:
PRIMARY
を選択します。(これが主キーの設定です)
- 名前:
book_title
カラム:- 名前:
book_title
- 型:
VARCHAR
- 長さ/値:
255
- 名前:
rating
カラム:- 名前:
rating
- 型:
INT
- 長さ/値:
1
- 名前:
review_text
カラム:- 名前:
review_text
- 型:
TEXT
- 名前:
created_at
カラム:- 名前:
created_at
- 型:
TIMESTAMP
- デフォルト:
CURRENT_TIMESTAMP
を選択します。(これにより、データ登録時に自動で現在日時が記録されます)
- 名前:
- 保存する: 全てのカラムを定義したら、画面下部の「保存する」ボタンをクリックします。テーブルが正常に作成されると、構造が表示されます。
3. テーブルに最初のデータを追加しよう
テーブルという器ができたので、手動で最初のレコードを追加してみましょう。
- 作成した
reviews
テーブルを選択した状態で、上部メニューの「挿入」タブをクリックします。 value
(値)の列に、登録したいデータを入力します。id
とcreated_at
は自動で入力されるため、空のままでOKです。book_title
:PHP入門
rating
:5
review_text
:とても分かりやすかった。
- 画面下部の「実行」ボタンをクリックします。「1行挿入されました」と表示されれば成功です。
- 「表示」タブをクリックすると、今登録したデータがテーブルに保存されていることを確認できます。
(予告) PHPでデータをテーブルに保存する
最終的な目標は、HTMLフォームから送信されたデータを、PHPプログラムを使ってこのテーブルに保存することです。PHP 8とPDOを使ったデータベースへのデータ挿入は、以下のようなコードになります。
insert.php
のサンプルコード:
<?php
// (データベースへの接続処理は省略)
// $pdo = new PDO(...);
// フォームから送信されたデータ(仮)
$title = "新しいWebデザインの本";
$rating = 4;
$review = "写真が多くて見やすい。";
// SQLインジェクション対策として、プリペアドステートメントを使用する
$sql = "INSERT INTO reviews (book_title, rating, review_text) VALUES (?, ?, ?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$title, $rating, $review]);
echo "新しいレビューを保存しました。";
?>
このように、PHPからSQL文を実行することで、動的にデータをテーブルに保存していきます。
まとめ
- テーブル設計は、アプリケーションのデータの骨格を決める重要な工程。
- 各カラムには、保存するデータに合わせたデータ型を指定する。
- 各レコードを一位に特定するため、主キー(通常はオートインクリメントの
id
カラム)を設定する。 - phpMyAdminを使えば、これらの作業を画面上で直感的に行うことができる。
これで、PHPアプリケーションのバックエンドを支える、しっかりとしたデータの基盤が完成しました。