テーブル設計でSQLの予約語をテーブル名やフィールド名で使用しないように注意する。
phpMyAdminのSQLタブでは create table で予約語を使用すると赤下線で警告が出る。``を用いれば予約語をテーブル名で使用できるが非推奨とする。
phpMyAdminのGUIでテーブルを作成する場合は予約語をフィード名に指定すると警告がでる。強制的にテーブルを作成可能であるが非推奨とする。
CakePHPの設定で予約語を使用可能に設定できるが非推奨とする。https://norm-nois.com/blog/archives/3320
データベース設計に問題があるか不安な受講生は担当教員やSAに内容確認を求めてください。
テーブル設計の確認:
・主キーはあるか?
・主キーのフィールド名は id か?
・主キーに AUTO_INCREMENTは設定されているか?
外部キー制約の確認:
テーブル→ 構造 または デザイナ から確認する。
デザイナで外部キー制約をコネクタを使って設定する際に参照する方向に注意する。
方向が間違っている場合はリンクをダブルクリックして削除を選択する。
コネクタで外部キー制約を設定できる条件
リンクするお互いのフィールドの 型 が一致している
インデックス(または主キー)を設定している
外部キーのフィールド名は正しく設定されているか?
参照元のテーブルが users ならフィールド名は user_id (userにsはつかない)
テーブルに主キーを設定(赤線)して、さらに外部キー制約用にインデックスを設定(青線)する例)
デザイナ画面の外部キー制約とテーブル構造の主キーとインデックスの関連図:
デザイナからコネクタで外部キーを設定した様子
SQLコマンド create table で複合キーに外部キー制約を設定した際の2020年度の状況(2022年度も同様か確認する)
game_idに銀色の鍵マークが付いていないが大丈夫か?
SQLの create table コマンドで外部キー制約付きでテーブルを作成する
→
主キーは複合キーの状態で設定され、さらに user_id 用のインデックス user_key も作成される。
game_idは複合キーの先頭カラムであるので、MySQLの仕様で外部キー制約用のインデックスとして利用される。
→
このためgame_key のインデック宣言は無効になりインデックスは作成されない。