Perhaps the best aproach is not using routers, but using plugins or a common controller. Without a deeper analysis, I would suggest you create the Front Controller plugin, and then inside the preDispatch() method you can talk to the database and reset to request that it be sent to the right controller.
You can also get the same effect using a common controller, all requests are sent to it, after which it can go to the right controller after talking to the database, although I prefer to use the plugin.
From the manual:
preDispatch() is called before the dispatcher dispatches the action. This callback allows proxy or filter behavior. By changing the request and resetting its send flag (via Zend_Controller_Request_Abstract::setDispatched(false) ), the current action can be skipped and / or replaced.
http://framework.zend.com/manual/en/zend.controller.plugins.html
source share