質問: データベースを作成するプロシージャ webで動作するシステムをユーザー単位でdbを作成し、管理しようと思うのですが、(1)dbを作成するプロシージャというものは作成できるのでしょうか? (2)というかそのようなwebシステムを作成したい場合、1ユーザーにつき1dbという管理方法で正しいのでしょうか? (3)1ユーザーにつき1dbの場合、mysqlのdbはmy.iniで設定されたメモリを超えない範囲ならいくつでもdbを作成できるのでしょうか? (4)そして作成するプロシージャを作成する場合、以下のような感じでinパラメータのusernameをプレフィックス「db_」の後ろにつけて作成しようと思うのですが、その場合パラメータをdb_の後ろに連結するにはどのように記述したらよいのでしょう? userkanridb:ユーザを管理しているメインのdb。ここにプロシージャを作成しようと思っています。 delimiter $$ drop procedure if exists `userkanridb`.`newdb` $$ create procedure `userkanridb`.`newdb` (in username integer(8)) begin drop table if exists `db_`.`mconfig`; create table `db_`.`mcconfig` ( `shime` int(2) not null, `usernm` varchar(20) not null, `style` tinyint(1) not null, `message` varchar(20) default null ) engine=innodb default charset=utf8; end $$ delimiter ; ご伝授御願いします。 mysqlのバージョン:mysql5.0.51
回答: 自動に登録されるユーザー毎にデータベースの別エリアを割り当てて操作するwebシステムを作成した事がありますが、経験的には、データベースをそれぞれのユーザー毎に割り当てるより、それぞれのユーザー毎に別テーブルを割り当てる方式の方が便利かと思います。 例) ・ユーザー a さん用のテーブル a_table1, a_table2, ... ・ユーザー b さん用のテーブル b_table1, b_table2, ... 当方、webシステム自体はphpで作成しましたが、データベース自体が違うと、コネクトから別に接続しなければいけなくなります。また、自動に登録されたユーザー毎にデータベースを作成する部分は、システムコマンドを連動させて動かさなければ出来ないのではと思います。 テーブルに修正が発生した場合も、ユーザー毎にテーブルが違うだけであれば、webシステム上から一律全ユーザーのテーブルを更新するロジックも作りやすいので、メンテナンスも楽でした。 以上、参考までに。