概要:
phpMyAdminで期末課題データベースを作成する。
phpMyAdminの新規テーブル作成 か SQL コマンドでテーブルを作成する。
データベースの準備(1/7)
第9回の課題で企画したデータベースを作成する
データベース名「3123888boardgame_rental」空白文字・全角文字禁止
照合順序 utf8mb4_general_ci
データベース名の変更が必要な場合:
日本語のデータベース名(全角文字)を使用している場合はアルファベットと数字と‗の名前に変更する。データベースが破損したりCakePHPとの連動に支障が出る。
変更方法:
phpMyAdmin ホームアイコン → データベース → データベース選択 → 操作
テーブルの準備(2/7)
第11回の課題で仮設計したテーブルを作成する。
CakePHPの命名規約に従ってテーブル名は 複数形 を指定する(単語の末尾に s)。 フィールド名は単数形を指定する
CakePHP用のテーブル設計のコツ
以下の規約に従うと開発の苦労を減らせる
・フィールド id を主キーに設定する。auto_incremental を設定する
・テーブル名は 英単語 の 複数形 を使う
・idの代わりにビューで表示項目として使用するフィールドの名前は title か name を使う
・テーブル名とフィールド名には小文字を使う。大文字を使わない
・テーブル名は 単語を2個以上使わない。どうしても2個以上の単語で名前をつける際は、スネークケース ( _ で単語をつなぐ)
・フィールド名は 単語を2個以上使わない。どうしても2個以上の単語で名前をつける際は、スネークケース ( _ で単語をつなぐ)
・外部キーをフィールドに持つ場合は参照先フィールドのテーブル名(複数形)のidフィールドを参照する
外部キーのフィールド名は 参照先のテーブル名の単数形に_id を付け加えた 単数形_id の書式を使う
・テーブルAsとテーブルBsの多対多の関係を記録するテーブルの名前は テーブルAs_テーブルBs とする
テーブル名は複数形のままつかう。テーブル名を並べる順番はアルファベット順
・テーブル名とフィールド名には PHPやMySQLの予約語 を使用しない
使用禁止な単語の例)
action as by char character class condition date datetime enable for from group index label limit list
match new option order release return select setting use value where year
使用に注意が必要な単語の例)
〇〇_id 末尾に_idが付くフィールドは外部キーだけにする。参照先のテーブルが必要。
「テーブルAs_テーブルBs 」の形式のテーブル名は中間テーブルに限定。その他の場合に用いない。
【参照】
CakePHPの命名規約まとめ http://qiita.com/nvtomo1029/items/1147b8796af3d906c3a9
データベース設計で使う英単語の例 https://qiita.com/otagaisama-1/items/4d7e2eb5c274e9fce664
以下に例を3つ示す。
ゲームテーブル: ID 、ゲーム名、 説明、を登録(3/7)
create table games (
id int not null auto_increment primary key,
name varchar(20) not null,
description text
);
※ テーブル名 games(複数形)やフィールド名 name (単数形)は各自の企画に合わせて変更する。
※ id フィールドは必須。上記の例同様に各自の企画のテーブルにも id フィールドを設定する。
利用者テーブル: ID 、用者名、を登録(4/7)
create table users (
id int not null auto_increment primary key,
name varchar(20) not null
);
※ 上記以外のフィールドを企画して追加することを推奨する。
貸出テーブル:貸し出しID、ゲームID、利用者ID、日付、を記録(5/7)
create table rentals (
id int not null auto_increment primary key,
user_id int not null,
game_id int not null,
date datetime,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (game_id) REFERENCES games(id)
);
※外部キーの設定について
user_id や game_id の部分はテーブル名を単数形にして _id を付加したフィールド名を用いている(CakePHPの規約)
第11回のテーブル設計の例について:
テーブルboardgames_categories
boardgames テーブルと categories テーブルのレコード間の多対多の関係を記録するテーブルである。
この様な2つのテーブルを結びつける中間テーブルは、2つのテーブル名をアルファベット順に並べて _ でつないだ名前をつける(CakePHPの規約)。
複合キー(PRIMARY KEY)の設定
PRIMARY KEY (boardgame_id, category_id)
の様にSQLで設定する。あるいはphpMyAdminで複合キーを設定する。第3回のstudent_groupの設定を参照。
外部キーの設定(FOREIGN KEY)の設定
MySQLで外部キー制約の設定を書く。
外部キーのフィールド category_id に テーブル categories のフィールド id を外部キー制約として設定する例)
FOREIGN KEY (category_id) REFERENCES categories(id)
あるいはphpMyAdminで外部キー制約を設定する。第4回課題(2/3)を参照。
SQLの例
CREATE TABLE boardgames_categories (
boardgame_id INT NOT NULL,
category_id INT NOT NULL,
PRIMARY KEY (boardgame_id, category_id),
FOREIGN KEY (boardgame_id) REFERENCES boardgames(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
テーブルの設計確認(6/7)
phpMyAdmin で期末課題のデータベースを開いてデザイナ画面からテーブルの設計を確認する。
課題提出(1/2)
スクリーンショットに記録して第12回課題の問1としてWebclassにアップロードする。
デザイナ画面はテーブルの関連が分かるように整理してからスクリーンショットを撮影すること。
サンプルデータの入力(7/7)
テーブルの設定を確認するために各テーブルに動作確認用のデータをphpMyAdminから入力する。
date など日付と時刻の入力には 関数の CURRENT_TIMESTAMP を指定すると登録時の日付と時刻が入力される。
動作確認が出来ればOK。
この時点では企画の全データを入力する必要はない。期末課題の提出までにbakeコマンドで cake bake all テーブル名 して CRUD を作成してから作業する。
課題提出(2/2)
期末課題提出の練習(仮提出)
xampp から データベースをエクスポートする。
3123888boardgame_rental.sql
のような名前でファイルがダウンロードされる。
第12回課題の問2としてWebclass にアップロードする。