tool sqldbm software online modeler data create database database-design database-schema

database - sqldbm - Cómo diseñar una base de datos SaaS



database modeler free (5)

¿Debo crear una nueva base de datos para cada empresa?

Sí, Don Dickinson estaba en el dinero. Sin embargo, ver un refinamiento a continuación.

¿O debería usar una base de datos con tablas que tengan un prefijo del nombre de la empresa?

Señor no! ¡Cambiar las consultas de la base de datos por diferentes para el cliente lo volvería loco! Además, es casi seguro que ejecutaría SQL dinámico (donde el nombre de la tabla cambia en el código antes de ejecutar la consulta), lo que perjudicaría el rendimiento, ya que a la mayoría de los servidores les gusta almacenar planes de consulta y resultados provisionales, esto no funciona si los nombres de la tabla seguir cambiando.

¿O debería usar una base de datos con una de cada tabla y simplemente agregar un campo de ID de empresa a las tablas?

Es posible que desee hacer esto si desea tener algún tipo de modelo escalable para sus clientes. Mientras que el suministro de una nueva base de datos para cada cliente le brinda mucha flexibilidad, también implica costos y complejidad. Debe crear un nuevo programa de copia de seguridad, tener un modelo de ciclo de vida para tratar con clientes vencidos, etc.

Por lo tanto, podría decir que los clientes de "prueba gratuita" y "bronce" se agrupan en una sola base de datos, utilizando la identificación de la compañía para separarlos; los usuarios "plateados" obtienen su propia base de datos (pero aún mantiene el campo customer_id en el esquema, por lo que no tiene que cambiar las consultas entre dos niveles de clientes), y los clientes "dorados" obtienen su propio servidor de base de datos.

Hice algo similar hace unos años en una empresa SaaS, y los clientes suelen estar contentos de tener una ruta de actualización en infraestructura (lectura: rendimiento y resistencia) así como también características.

Tengo una aplicación web que creé para una empresa de camiones que me gustaría ofrecer como SaaS. ¿Cuál es la mejor manera de diseñar la base de datos?

¿Debo crear una nueva base de datos para cada empresa? ¿O debería usar una base de datos con tablas que tengan un prefijo del nombre de la empresa? ¿O debería usar una base de datos con una de cada tabla y simplemente agregar un campo de ID de empresa a las tablas? ¿O hay alguna otra manera de hacerlo?


Ante una situación similar hace unos 10 años, optamos por una base de datos por cliente. Tenemos cientos (no miles) de clientes. Mirando hacia atrás fue una de las mejores decisiones que tomamos. Las copias de seguridad son fáciles. copiar un solo cliente a nuestra oficina para su análisis es fácil (solo tome la última copia de seguridad). El escalamiento es fácil (mover un gran cliente a un servidor diferente puede liberar recursos en un servidor SQL estresado). joel y jeff tuvieron una discusión sobre esto en un podcast de desbordamiento de pila (no uno reciente) y joel hizo lo mismo que yo ... cada cliente obtiene su propia base de datos. los puristas de la base de datos a menudo abogarán por agrupar a todos en una base de datos, pero yo nunca haría eso.

-don


Depende, aquí, trabajo en una compañía que tiene muchas "unidades de negocio internas" tratadas como otras compañías. Por lo tanto, algunos informes deben incluir todas las compañías, las cuentas de los clientes también deben compartirse entre las compañías. Aquí tenemos un campo CompanyId en las tablas que lo requieren. La solución de Prefijo es seguramente una de evitarse.


Tenemos algunas bases de datos aquí con clientes compartidos y otras donde cada cliente tiene su propio servidor y su propia base de datos. Los que tienen el cliente en su propio servidor son los más fáciles de administrar y los menos propensos a causar problemas cuando algún desarrollador olvidó agregar el ID de cliente y envió los datos del cliente a al cliente b por accidente (un ejemplo NO elegido al azar).

Mantener cada uno en su propio servidor o instancia de servidor nos permite mantener la estructura de la base de datos con los mismos nombres y facilita la propagación de cambios a todos los servidores porque no tenemos que cambiar el nombre de la base de datos.

Si utiliza instancias separadas para cada cliente, asegúrese de diseñar e implementar un buen sistema para propagar todos los cambios a todos los clientes. Si estas bases de datos se desincronizan, pueden volverse horribles de mantener. Descubrirá que si los deja sin sincronización, cada cliente solicitará cambios y tendrá 27 formas de hacer lo mismo. Debe generalizar cuando están en la misma base de datos, cuando están separados, debe usar la autodisciplina para garantizar que la nueva funcionalidad sea la misma para cada cliente.