У меня похожая ситуация. Разрабатываю SaaS приложение, где много пользователей, при этом каждый сам себе король, у каждого своя нумерация (id) и т.д. и т.п. Тоже думал про несколько баз, но в результате решил использовать одну базу
В БД к таблицам добавляю поля (int) personalID и projectID, а дальше наследуюсь вот от этого класса
abstract class PersonalActiveRecord extends CActiveRecord
{
public $usePersonalID = true; // Использовать ли персональную нумерацию
public $personalID = null;
public $projectID = null;
protected function personalIdExpression(){
$sql =
'COALESCE((SELECT personalID FROM
(SELECT (MAX(personalID)+1) as personalID FROM '.$this->tableName().' WHERE projectID = '.$this->projectID.')
as personalID ),1)';
return new CDbExpression($sql);
}
protected function beforeSave(){
if (!parent::beforeSave()) return false;
if ($this->isNewRecord) {
$this->projectID = (int)Y::param('projectID');
if ($this->usePersonalID)
if ($this->personalID===null) $this->personalID = $this->personalIdExpression();
}
return true;
}
public function defaultScope() {
return array(
'condition'=>"projectID='".(int)Y::param('projectID')."'",
);
}
}