Certainly we want to avoid processing unnecessary table definitions with every request.
It seems to me that the simplest solution is something like this: if request.controller=='foo': db.define_table('foo', Field...) # main table db.define_table('foo_one_to_many', Field(foo_id, db.foo...)...) ... What is the advantage of the no models architecture over this?