Page 1 of 2

Sistema multi empresa con mysql

Posted: Mon Feb 22, 2021 6:51 pm
by joseluisysturiz
Saludos, tengo una pequeña duda y espero sus ayudas, tengo un sistema que usa mysql uniempresa, ahora debo pasarlo a multi empresa y debo emitir reportes y consultas consolidadas de todas las empresas , que sería mejor ..

* crear una database por cada empresa

* usar una sola database y en las tablas crear un campo que identifique a que empresa pertenece

* alguna otra sugerencia o recomendacion

Gracias...

Re: Sistema multi empresa con mysql

Posted: Mon Feb 22, 2021 7:45 pm
by Armando
José Luis:

Mis cinco cents, te recomiendo una base de datos por cada empresa, así la manipulación
sería más eficiente.

Respecto a los reportes, no vas a tener ningún problema pues puedes tomar información
de diferentes tablas ubicadas en diferentes bases de datos, además esa tarea se la dejas
al motor de MySQL, solo te recomiendo que _ se llamen igual en cada tabla.

Dale una mirada al tipo de tablas MERGE.

Saludos y éxito

Re: Sistema multi empresa con mysql

Posted: Mon Feb 22, 2021 7:59 pm
by joseluisysturiz
Armando wrote:José Luis:

Mis cinco cents, te recomiendo una base de datos por cada empresa, así la manipulación
sería más eficiente.

Respecto a los reportes, no vas a tener ningún problema pues puedes tomar información
de diferentes tablas ubicadas en diferentes bases de datos, además esa tarea se la dejas
al motor de MySQL, solo te recomiendo que _ se llamen igual en cada tabla.

Dale una mirada al tipo de tablas MERGE.

Saludos y éxito
Armando, estas conformando mi iniciativa de usar database por empresa, las tablas y sus campos seran ños mismos, en relación a los reportes y consultas ya revisare, gracias

Re: Sistema multi empresa con mysql

Posted: Mon Feb 22, 2021 8:33 pm
by hmpaquito
Hola,

Además de tus dos propuestas hay otra que sería "intermedia": Crear tablas por empresa: Ventas001 / Ventas002. Esto requeriría tener "alias" para cada tabla cTablaVentas:= "Ventas"+ oEmpresa:CodEmp

Partiendo de tu situacion, para ser lo más compatible posible, lo más rápido y limpio en el código existente es una bb.dd. por cada empresa.

Mis dos céntimos

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 2:54 am
by joseluisysturiz
hmpaquito wrote:Hola,

Además de tus dos propuestas hay otra que sería "intermedia": Crear tablas por empresa: Ventas001 / Ventas002. Esto requeriría tener "alias" para cada tabla cTablaVentas:= "Ventas"+ oEmpresa:CodEmp

Partiendo de tu situacion, para ser lo más compatible posible, lo más rápido y limpio en el código existente es una bb.dd. por cada empresa.

Mis dos céntimos
Saludos, no entiendo bien tu opción, creo lo mas aceptable y funcional es una DB por empresa..por eso fue mi primera idea, igual gracias por tu sugerencia..Saludos... :shock:

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 5:08 am
by artu01
Jose Luis:
Para mi seria una sola BD, una sola tabla ventas y agregar un campo codemp en la tabla vtas para que en cada movimiento transaccional en la tabla guardes el codemp que lo actualizo, es alli que si variaría ligeramente tu código fuente pero para los reportes no sufrirían ningún cambio el código fuente

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 11:59 am
by joseluisysturiz
artu01 wrote:Jose Luis:
Para mi seria una sola BD, una sola tabla ventas y agregar un campo codemp en la tabla vtas para que en cada movimiento transaccional en la tabla guardes el codemp que lo actualizo, es alli que si variaría ligeramente tu código fuente pero para los reportes no sufrirían ningún cambio el código fuente
Saludos, el detalle de usar una sola BD es que ...
* voy a teber todos los datos en una solatabla, eso sumentatria el tanaño de las misnas y el tiempo de respuesta
* tengo que agregar en todas lad tablas el campo que identifique a que empresa pertenece
* tengo que modificar todas las consultas y reportes con WHERE para saber a queempresa pertenece
* cuando haga respaldo como debe ser por empresa debo modificar el sistema de respaldo para que solo seleccione los registros de la empresa que respaldo
* otros

Todo eso lo evito usando una BD por empresa, solo debo al seleccionar la empresa cambiar la conexión a esa BD y listo...sin ningun cambio en códigos...es mi punto y análisis que hice..igual gracias por tu sugerencia...Saludos... :shock:

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 3:05 pm
by ACC69
joseluisysturiz wrote:
artu01 wrote:Jose Luis:
Para mi seria una sola BD, una sola tabla ventas y agregar un campo codemp en la tabla vtas para que en cada movimiento transaccional en la tabla guardes el codemp que lo actualizo, es alli que si variaría ligeramente tu código fuente pero para los reportes no sufrirían ningún cambio el código fuente
Saludos, el detalle de usar una sola BD es que ...
* voy a teber todos los datos en una solatabla, eso sumentatria el tanaño de las misnas y el tiempo de respuesta
* tengo que agregar en todas lad tablas el campo que identifique a que empresa pertenece
* tengo que modificar todas las consultas y reportes con WHERE para saber a queempresa pertenece
* cuando haga respaldo como debe ser por empresa debo modificar el sistema de respaldo para que solo seleccione los registros de la empresa que respaldo
* otros

Todo eso lo evito usando una BD por empresa, solo debo al seleccionar la empresa cambiar la conexión a esa BD y listo...sin ningun cambio en códigos...es mi punto y análisis que hice..igual gracias por tu sugerencia...Saludos... :shock:
Hola Ing. Jose Luis buenos dias que tal como esta, espero que bien.

En mi punto de vista yo te sugiero crear tablas pada cada empresa, no es recomendable crear una sola tabla para multiempresas, imaginese si tendria que reindexar una sola empresa o darle mantenimiento a una sola empresa de los 99 empresas que contiene en una sola tabla y mientras otros estan usando misma tabla compartiendo para muchos usuarios se estaria alentando demasiado la velocidad cuando algun usuario detecte que esta lento al abrir la base de datos, yo tengo sistema de contabilidad de compac y he visto como esta el contenido de la BD y por cada nueva empresa se crea una nuevas tablas.

Otro punto y si el usuario desea trasladar su informacion completa o sea toda la tabla a otra empresa, le estaria trasladando todas las empresas a otra computadora y si se daña la tabla se dañaria toda la informacion dentro de esa tabla imaginese como se sentiria el usuario o el dueño del sistema.

Asi que lo mas recomendable y sano es crearte una tabla para cada empresa y evitar modificar tu reporte condicionando para cada ID de empresa.

Otra sugerencia podrias crear carpeta por cada empresa y dentro de esa carpeta las tablas sin ningun problema.
Ejemplo:

C:\EMP01\TABLAS
C:\EMP02\TABLAS
C:\EMP03\TABLAS
C:\EMP04\TABLAS

Sin necesidad de crear alias, simplemente identificando a que carpeta esta alojada las tablas para cada empresa....mi punto de vista
y las ideas...


Saludos y mi punto de vista y las ideas.

Atte: Adriano C. C.

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 3:23 pm
by joseluisysturiz
ACC69 wrote:
joseluisysturiz wrote:
artu01 wrote:Jose Luis:
Para mi seria una sola BD, una sola tabla ventas y agregar un campo codemp en la tabla vtas para que en cada movimiento transaccional en la tabla guardes el codemp que lo actualizo, es alli que si variaría ligeramente tu código fuente pero para los reportes no sufrirían ningún cambio el código fuente
Saludos, el detalle de usar una sola BD es que ...
* voy a teber todos los datos en una solatabla, eso sumentatria el tanaño de las misnas y el tiempo de respuesta
* tengo que agregar en todas lad tablas el campo que identifique a que empresa pertenece
* tengo que modificar todas las consultas y reportes con WHERE para saber a queempresa pertenece
* cuando haga respaldo como debe ser por empresa debo modificar el sistema de respaldo para que solo seleccione los registros de la empresa que respaldo
* otros

Todo eso lo evito usando una BD por empresa, solo debo al seleccionar la empresa cambiar la conexión a esa BD y listo...sin ningun cambio en códigos...es mi punto y análisis que hice..igual gracias por tu sugerencia...Saludos... :shock:
Hola Ing. Jose Luis buenos dias que tal como esta, espero que bien.

En mi punto de vista yo te sugiero crear tablas pada cada empresa, no es recomendable crear una sola tabla para multiempresas, imaginese si tendria que reindexar una sola empresa o darle mantenimiento a una sola empresa de los 99 empresas que contiene en una sola tabla y mientras otros estan usando misma tabla compartiendo para muchos usuarios se estaria alentando demasiado la velocidad cuando algun usuario detecte que esta lento al abrir la base de datos, yo tengo sistema de contabilidad de compac y he visto como esta el contenido de la BD y por cada nueva empresa se crea una nuevas tablas.

Otro punto y si el usuario desea trasladar su informacion completa o sea toda la tabla a otra empresa, le estaria trasladando todas las empresas a otra computadora y si se daña la tabla se dañaria toda la informacion dentro de esa tabla imaginese como se sentiria el usuario o el dueño del sistema.

Asi que lo mas recomendable y sano es crearte una tabla para cada empresa y evitar modificar tu reporte condicionando para cada ID de empresa.

Otra sugerencia podrias crear carpeta por cada empresa y dentro de esa carpeta las tablas sin ningun problema.
Ejemplo:

C:\EMP01\TABLAS
C:\EMP02\TABLAS
C:\EMP03\TABLAS
C:\EMP04\TABLAS

Sin necesidad de crear alias, simplemente identificando a que carpeta esta alojada las tablas para cada empresa....mi punto de vista
y las ideas...


Saludos y mi punto de vista y las ideas.

Atte: Adriano C. C.
Saludos colega, todo lo que me dice es correcto y válido...si yo usara DBF, pero estoy usando MySql, y la forma de hacer lo que sugieres es creando Base de Datos por emptesa (BD), que harían la función de directorios por cada empresa, gracias... :shock:

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 7:19 pm
by artu01
joseluisysturiz wrote:
artu01 wrote:Jose Luis:
Para mi seria una sola BD, una sola tabla ventas y agregar un campo codemp en la tabla vtas para que en cada movimiento transaccional en la tabla guardes el codemp que lo actualizo, es alli que si variaría ligeramente tu código fuente pero para los reportes no sufrirían ningún cambio el código fuente
Saludos, el detalle de usar una sola BD es que ...
* voy a teber todos los datos en una solatabla, eso sumentatria el tanaño de las misnas y el tiempo de respuesta
* tengo que agregar en todas lad tablas el campo que identifique a que empresa pertenece
* tengo que modificar todas las consultas y reportes con WHERE para saber a queempresa pertenece
* cuando haga respaldo como debe ser por empresa debo modificar el sistema de respaldo para que solo seleccione los registros de la empresa que respaldo
* otros

Todo eso lo evito usando una BD por empresa, solo debo al seleccionar la empresa cambiar la conexión a esa BD y listo...sin ningun cambio en códigos...es mi punto y análisis que hice..igual gracias por tu sugerencia...Saludos... :shock:
Sorry jose luis no habia leido bien yo me referia a una empresa con sucursales o tiendas, pero si son empresas no vinculadas entonces estoy de acuerdo con tu forma de pensar

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 8:07 pm
by joseluisysturiz
Saludos, no hay problema, y no importa si las empresas son vinculadas o no, la idea es que el sistema sea multi empresa, gracias... :shock:

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 10:57 pm
by cmsoft
Jose Luis, mis 2 ctvos.
Creo que si tienes acceso ilimitado a la base de datos, es una muy buena opción una base por cada empresa. El sistema es el mismo, solo tiene que saber a que base conectarse para cada empresa.
Claro que todo depende de la cantidad de información que genere cada empresa, y la capacidad de tu servidor.
Yo tengo algo similar armado, y funciona muy bien.
Como aporte, te cuento de mi experiencia, tengo una base de datos de CONTROL donde tengo en ella cada empresa identificada, en una tabla. Dicha tabla me dice de cada empresa, cual es su identificación, estado, etc. e incluso me dice en que hosting y que base de datos usa. De esta manera, puedo tener las bases de datos en diferentes servidores.
Espero te sirva...

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 11:13 pm
by joseluisysturiz
cmsoft wrote:Jose Luis, mis 2 ctvos.
Creo que si tienes acceso ilimitado a la base de datos, es una muy buena opción una base por cada empresa. El sistema es el mismo, solo tiene que saber a que base conectarse para cada empresa.
Claro que todo depende de la cantidad de información que genere cada empresa, y la capacidad de tu servidor.
Yo tengo algo similar armado, y funciona muy bien.
Como aporte, te cuento de mi experiencia, tengo una base de datos de CONTROL donde tengo en ella cada empresa identificada, en una tabla. Dicha tabla me dice de cada empresa, cual es su identificación, estado, etc. e incluso me dice en que hosting y que base de datos usa. De esta manera, puedo tener las bases de datos en diferentes servidores.
Espero te sirva...
Saludos colega, por los momentos el sistema está en iba red Local, pero para no tener que hacer instalación de mysql en cada pc, se consideró hacer el sistema multi empresa para cuando se lleve a web, lo cual ya trabajo en ello, este adelantado esa parte. Lo otro es que es un mismo dueño de todas las empresas, por esi a él hay que hacerle reportes consolidados e individuales por empresa, solo me faltan los consolidados, cualquier duda por aca la haré saber, gracias por tus 2 ctv... :shock:

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 11:32 pm
by cmsoft
José Luis, para cualquier consulta que necesites, cuenta conmigo.
Los consolidados simplemente tienes que anteponer el nombre de la base de datos a cada tabla (ya que todas las tablas se llaman igual en las distintas bases de datos) y hacer el UNION de los datos que quieres sacar.
Ejemplo :
SELECT res.* FROM ( SELECT SUM(importe ) as importe, 1 as empresa FROM base1.ventas WHERE fecha BETWEEN '2020-01-01' AND '2020-12-31' UNION SELECT SUM(importe ) as importe, 2 as empresa FROM base2.ventas WHERE fecha BETWEEN '2020-01-01' AND '2020-12-31') AS res

Re: Sistema multi empresa con mysql

Posted: Tue Feb 23, 2021 11:58 pm
by joseluisysturiz
cmsoft wrote:José Luis, para cualquier consulta que necesites, cuenta conmigo.
Los consolidados simplemente tienes que anteponer el nombre de la base de datos a cada tabla (ya que todas las tablas se llaman igual en las distintas bases de datos) y hacer el UNION de los datos que quieres sacar.
Ejemplo :
SELECT res.* FROM ( SELECT SUM(importe ) as importe, 1 as empresa FROM base1.ventas WHERE fecha BETWEEN '2020-01-01' AND '2020-12-31' UNION SELECT SUM(importe ) as importe, 2 as empresa FROM base2.ventas WHERE fecha BETWEEN '2020-01-01' AND '2020-12-31') AS res
Buenisimo cmsoft, y lo de la BD control no se me había ocurrido y es lógico, una sola tabla con los datos de las empresas que sirva como eje para cambio de una a otra y que puedo controlar cual fue la última que el usuario entró y traer esa empresa por defecto para no tener que preguntar cada ves que el usuario salga a que empresa va y si se quiere cambiar de empresa lo haga dentro de la que está trabajando...se me vino esa idea, veré cómo me va..y aviso...Gracias... :shock: