CakePHP5入門【CakePHP5応用編②】データベース設計
B美
A子
B美
「CakePHP」を利用するなら、それが一番効率的ね
C菜
A子
B美
問題があったら適当に口をはさむから、あなたたちの思ったようにやりなさい
C菜
「データベース名」と二つの「テーブル名」ですね~
A子
投稿を格納するテーブルの名前は「toukou」、アクセスログのテーブル名は「log」で良いんじゃない?
C菜
ローマ字はダサいですぅ~
英語にしましょうよ~
投稿用のテーブル名は「post」でどうですか~?
A子
ま、まぁそれでも良いでしょう
んじゃ、名前はそれで決まりね
B美
データベース名はそれで問題ないけど、テーブル名のほうは「複数形」にしてね
つまり、「posts」と「logs」ね
A子
なんでよ
B美
あ、複数の単語を組み合わせる場合は「スネークケース」でお願いね
(例えば「access_logs」って感じで…)
C菜
次は、テーブル設計ですね~
A子
create database testdb;
use testdb; create table counters ( id int auto_increment primary key, remarks varchar(255), counter int not null, created datetime, modified datetime ) charset=utf8mb4; insert into counters values (1,'top',0,now(),now()); |
C菜
create database bbsdb;
use bbsdb; create table posts ( ・・・ (ここに項目を記述) ・・・ ) charset=utf8mb4; create table logs ( ・・・ (ここに項目を記述) ・・・ ) charset=utf8mb4; |
…で良いでしょうか~?
B美
(もともとのやつのコピペで良いから…)
A子
create database bbsdb;
use bbsdb; create table posts ( id int auto_increment primary key, ・・・ (ここに項目を記述) ・・・ created datetime, modified datetime ) charset=utf8mb4; create table logs ( id int auto_increment primary key, ・・・ (ここに項目を記述) ・・・ created datetime, modified datetime ) charset=utf8mb4; |
こういうこと?
C菜
B美
難しく考えずに、「そういうものだ」と思っておけば良いからね
A子
まずは「posts」からね
C菜
あと、アップロードしたファイルの「保存場所」、それと「削除フラグ」ですかね~
A子
create table posts (
id int auto_increment primary key, title varchar(255), body varchar(255), filepath varchar(255), delete_flag int, created datetime, modified datetime ) charset=utf8mb4; |
…で良いのかな?
B美
一つは「本文」を格納する項目(「body」という名の項目)のデータ型よ
(「varchar(255)」の「255」って最大文字数なの)
もう一つはファイルの「保存場所」だけじゃなく、(オリジナルの)「ファイル名」も格納しておきたいのよ
いや、アップロードしたファイルが日本語のファイル名だった場合、そのままでは画像ファイルへのリンクを張れないからね
(ファイル保存の際、ファイル名を半角英数字に変えて格納するから、元々のファイル名も残しておきたい…ってわけ)
A子
(項目を一つ増やせば良いだけよね)
んで、「本文」のほうは「body」のデータ型を「varchar(100000)」とかにすれば良いの?
B美
データベースには、大量の文字列を格納するためのデータ型がちゃんと用意されているのよ
(上限設定なしで…)
それが「text」型よ
C菜
create table posts (
id int auto_increment primary key, title varchar(255), body text, filename varchar(255), filepath varchar(255), delete_flag int, created datetime, modified datetime ) charset=utf8mb4; |
…ってことでしょうか~?
B美
あ、余談だけど「delete_flag」は「int」型(整数型)じゃなくて「boolean」型(論理型)にしてもOKよ
(まぁ、将来の拡張性を考えた場合、「int」型のほうが良いと思うけどね…てか、私ならそうする)
A子
B美
うっかり何も入れずに(NULL値のまま)レコード挿入した場合、エラーを出してくれるからね
(ただし「id」「created」「modified」には付けなくても良いわ)
C菜
A子
create table posts (
id int auto_increment primary key, title varchar(255) not null, body text not null, filename varchar(255), filepath varchar(255), delete_flag int not null, created datetime, modified datetime ) charset=utf8mb4; |
B美
次は「logs」テーブルね
C菜
create table logs (
id int auto_increment primary key, ip_address varchar(15), post_id int not null, created datetime, modified datetime ) charset=utf8mb4; |
…って感じでしょうか~?
「IPアドレス」って「xxx.xxx.xxx.xxx」という形式なので、最大でも15文字ですから~
B美
少しは余裕を持たせないと…
A子
(キリの良いところで…)
えーっと、あとは何かあるかな?
B美
とりあえずは、それでやってみましょう
A子
create database bbsdb;
use bbsdb; create table posts ( id int auto_increment primary key, title varchar(255) not null, body text not null, filename varchar(255), filepath varchar(255), delete_flag int not null, created datetime, modified datetime ) charset=utf8mb4; create table logs ( id int auto_increment primary key, ip_address varchar(50), post_id int not null, created datetime, modified datetime ) charset=utf8mb4; |
…ってことになるね
C菜
(B美部長の助言があったとはいえ…)
A子
あとは、これを「bbsdb.sql」というファイル名で保存して、「mysql」コマンドを実行すれば良いのよね?
C菜
mysql -u root -p < bbsdb.sql[Enter] |
で良いはずです~
(もちろん「MATE端末」上で実行です~)
A子
mysql -u root -p bbsdb[Enter] |
のあと
show fields from posts;[Enter] |
を打ち込んでっと…
↓
C菜
show fields from logs;[Enter] |
も確認するです~
B美
それじゃ、次回はいよいよ「CakePHP」のプロジェクトを作っていきましょう
お楽しみにー