質問: あるアカウントが作成されるごとに、そのアカウントに応じて別々のテーブルを動的に生成したいのですが、CakePHPで提供されているライブラリのようなものを見つけることができませんでした。 なので、query() を使って直接SQL文を投げる方法も考えたのですが、あまり推奨されていないようでした。 動的にテーブルを生成するようなことはあまり行わないのでしょうか。 もし、生成するとするならばquery() を使う以外で方法をご存知の方がいらっしゃいましたら、 教えていただけると助かります。 また以下は生成したいテーブルのqueryです。 ``` CREATE TABLE `comment_table` ( `comment_table_id` int(11) unsigned NOT NULL AUTO_INCREMENT , `post_id` int(11) NOT NULL , `user_id` int(11) NOT NULL , `id` int(11) NOT NULL , `text` text NOT NULL , `img` text , `create_at` datetime NOT NULL, PRIMARY KEY (`colony_comment_table_id`) ) ENGINE=InnoDB AUTO_INCREMENT=36 DEFAULT CHARSET=utf8; ``` --- 現在開発しているアプリがツイッターのように1つのタイムラインで全員が会話するものではなく、2chの掲示板のように複数あるコミュニティ(このコミュニティはユーザーが作成することができる)の中で、タイムラインが存在するようなものなんですが、そういった場合1つのテーブルの中ですべてのコミュニティのタイムライン情報が管理されているのでしょうか。 直感的ではありますが、コミュニティごとのタイムラインを管理するようなテーブルがあったほうがスムーズのような気もするのですが。 いかがでしょうか。
回答: CakePHPでは特にCREATE TABLEに関する機能はないので、CREATE文のSQLで発行していますね。 動的にCREATE TABLEでテーブルが作られていく設計にした場合、いくつか懸念点があるのですが、 * テーブルを横断的に検索する機能なり画面があると検索処理が大変になるのではないか + 例えばユーザーAさんが発言した内容を全てのテーブルから取得する場合など + 索引(インデクス)はテーブルごと + 増え続けるテーブルのサイジングやメンテナンス もちろん、想定されているユーザ数や書き込みがあまりに多い場合やコミュニティの増加が読めない場合によってはテーブルを分けて作ったほうが、索引はわかれますので良い面もあります。 参考になれば幸いです。