Ok... Que sean diferentes sociedades no es muy relevante en este momento. Lo importante es saber si los requeridos de datos son los mismos, para lo cual lo que necesitamos saber es si pertenecen al mismo rubro comercial, o a diferentes, e incluso si siendo el mismo tiene
exactamente los mismos requisitos de datos.
Debes entender claramente que una base de datos se diseña en función de las necesidades de un sistema dado. NO sólo por el rubro, y que dos empresas que se dedican exactamente a lo mismo, e incluso si facturan a los mimos clientes,
pueden no necesitar el mismo diseño de bases de datos, dependiendo de sus proceso internos.
Por ello la base no debería diseñarse sin un relevamiento mínimo de los requisitos de cada empresa.
¿Has verificado que en todos los casos estés trabajando siempre con el mismo esquema de procesos?
Si es así, puede manejarse todo con una única base de datos, y con identificadores propios para cada empresa.
Si por otro lado, tienen proceso diferentes, entonces no puedes hacer un esquema centralizado, y deberás crear bases para cada una.
También puedes crear esquemas replicados de las estructuras de la base, pero eso te complicará cualquier evolución posterior, ya que cualquier cambio que hagas en una deberá replicarse a su vez en todas las bases al mismo tiempo. Eso a la larga impacta en el mantenimiento del sistema.
¿Se va entendiendo el problema?
Finalmente:
Cita: en la variable Session va a estar la base de datos
la variable de sesión no es parte del modelo de datos. Es un tema programático y dóde y como lo manejes, es irrelevante para la base.
De hecho, si gestionas los usuarios por MySQL, por ejemplo, puedes dar permisos a los usuarios para una única base, por lo que el que lo guardes o no en la sesión de la aplicación dependerá de tus necesidades allí. de todos modos, si el user no tiene permisos para acceder a ella, no la podría ver...
Pero manejar los usuarios a nivel BBD es algo que requiere bastante práctica.