dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

 自動に登録されるユーザー毎にデータベースの別エリアを割り当てて操作するWebシステムを作成した事がありますが、経験的には、データベースをそれぞれのユーザー毎に割り当てるより、それぞれのユーザー毎に別テーブルを割り当てる方式の方が便利かと思います。



例)
・ユーザー a さん用のテーブル
a_table1, a_table2, ...
・ユーザー b さん用のテーブル
b_table1, b_table2, ...

 当方、WEBシステム自体はphpで作成しましたが、データベース自体が違うと、コネクトから別に接続しなければいけなくなります。また、自動に登録されたユーザー毎にデータベースを作成する部分は、システムコマンドを連動させて動かさなければ出来ないのではと思います。
 テーブルに修正が発生した場合も、ユーザー毎にテーブルが違うだけであれば、WEBシステム上から一律全ユーザーのテーブルを更新するロジックも作りやすいので、メンテナンスも楽でした。

 以上、参考までに。
    • good
    • 0
この回答へのお礼

経験がある方のご意見大変参考になりました、ありがとうございます。
ユーザーごとのDBではなくてひとつのDBにユーザー判別のプレフィックスをつけて各テーブルをまとめて作成すればメンテナンス上も良いということですね。
その場合、
パラメータでユーザ判別するプレフィックスをパラメータで渡すには
どのように記述したらよいでしょうか?
MySQLのプロシージャに関して情報が少ないので質問させていただきます。


・[*****]の部分に名前パラメータ(:in username varchar(8))を連結させたい
・programDb:メインのDB

DELIMITER $$
CREATE PROCEDURE `newTableset`(in username varchar(8))
BEGIN
DROP TABLE IF EXISTS `programDb`.`[*****]mConfig`;
CREATE TABLE `programDb`.`[*****]mConfig` (
`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;

CREATE TABLE `programDb`.`[*****]mList` (
・・・

END $$

DELIMITER ;

お礼日時:2008/05/24 16:23

ANo.1です。



>パラメータでユーザ判別するプレフィックスをパラメータで渡すに
>はどのように記述したらよいでしょうか?
>MySQLのプロシージャに関して情報が少ないので質問させていただ
>きます。

 MySQLでストアドプロシージャの使用経験が無いので当方も判りません。
 しかしテーブルの作成であれば、ストアドプロシージャでなく、通常の create teble 文を動的に作成してWEBシステムを作成する言語のmysql用のquery用関数(ルーチン)から発行して作成すれば良いのではないでしょうか。
    • good
    • 0
この回答へのお礼

今まで作成したことのあるシステムではまとまったクエリはプロシージャを作成していたので、プロシージャでできないものかとウェブ上を探しておりました。
通常のDB用の関数を用いてCREATE文を流すようにします。
助言いただき、ありがとうございます。

お礼日時:2008/05/27 15:33

prepare文とexecute文を使って、SQLを動的に生成&実行しましょう。

    • good
    • 0
この回答へのお礼

prepare文とexecute文について調べてみました。
わからない部分はたくさんありますが、参考にプログラム作成
に励みます。
ありがとうございました。

お礼日時:2008/05/27 15:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!