¿Una BD por cliente?

  • Autor Autor Usuario eliminado 232346
  • Fecha de inicio Fecha de inicio
U

Usuario eliminado 232346

Hola!, hace unos días consulté por algo similar a esto pero sigo con dudas.
Estoy creando un sistema web al cual distintos clientes acceden desde una misma URL.
La duda que tengo antes de programarlo por completo, es como organizar la Base de datos, me refiero a si será recomendable crear una por cada cliente. Cada bD tendría 3 tablas (datos_usuario, clientes y pedidos).

Una alternativa fué utilizar la misma para todos los clientes y filtrar por ID, o si no crear una BD por cada usuario.
¿Que otra alternativa puede haber o que piensan acerca de las planteadas?.
 

Creo que lo normal es usar la misma para todos!
 
Una sola base de datos. Crea una tabla llamada "clientes", por ejemplo, y ahí le añades un ID numérico que se genere solo (auto increment) y los campos que quieras (por ejemplo usuario y pass). Y añade el campo de ID de cliente en cada una de tus otras tres tablas para asociarlas.
 
Gracias por responder. Seguramente haga una sola BD, por un tema de que con el pasar del tiempo no sería recomendado modificar cada tabla de todas la BD. Disculpen que sea novato, mas allá de que hay mucha información en Google me gusta saber sus opiniones.
 
Depende, yo tengo un sistema que vendo a varios clientes, todos ellos comparten el mismo código fuente, cada uno se conecta desde a un dominio distinto (alias de dominio, para tener el código fuente centralizado) y según el nombre de dominio (y subdomonio) se conecta a la base de datos de cada uno.

😳 y como se hace esa magia?



😱😱

¿Por qué lo hago así? cree la aplicación para mi, y no me pareció adecuado rehacerla completamente para que sea multicliente. Por otro lado, los clientes no comparten datos entre ellos. Cliente es mi cliente, no el cliente de mi cliente.

Saludos

pd: lo malo de esta forma de hacerlo es que en caso de tener que modificar la bbdd (alter table/create) debes modificar en muchas partes.
 
Última edición:

Interesante método, gracias por compartirlo.
Cuando un cliente adquiere si cuenta ¿le creas automáticamente el dominio o lo haces de manera manual?.
 
Cuando un cliente adquiere si cuenta ¿le creas automáticamente el dominio o lo haces de manera manual?.
Semi manual, hay que configurar pasarelas de pago, el dominio, el subdominio, otros.
 
Es como el concepto de "Sucursal", cada sucursal solo puede ver lo que le compete y sus clientes, en este caso como ya te dijeron mas arriba lo conveniente es hacer en 1 sola Base de Datos y manejalo por los ID de cada cliente para que él vea lo que tenga que ver y no pueda ver lo que corresponde a otro y asi. La modificacion o escalabilidad seria mas "facil".
 
Gracias por tu respuesta.
Me decidí por hacerla de esa manera, de lo contrario a largo plazo me vería muy complicado para realizar algún cambio.
Entonces, para filtrar los datos lo mejor sería al realizar una consulta utilizar el id de usuario almacenado a una variable SESSION, ¿cierto?
 
A la hora de diseñar una BD, piensa en ella como un conjunto de entidades o "cosas" que se relacionan unas con otras. Si no, te vas a liar mucho.

Por ejemplo:
  • Clientes
  • Pedidos
En este caso, lo mejor sería crear una tabla para la entidad clientes y otra para la entidad pedidos. Por ejemplo:

Tabla "clientes":
  • id_cliente
  • usuario
  • clave
  • nombre
  • apellidos
  • email
Tabla "pedidos":
  • id_pedido
  • id_cliente (aquí estás relacionando cada pedido con un cliente de la otra tabla)
  • ...
Esto es un ejemplo simplificado, pero debes replicar este modelo de entidades en todo el proceso. Por ejemplo, si cada cliente tiene una sola dirección, entonces la dirección la puedes considerar parte de la info de la entidad cliente y puedes meterlo todo en la tabla "clientes", pero si un mismo cliente puede almacenar dos o más direcciones distintas, entonces dirección sería otra entidad (otra tabla) que tendrá su ID (id_direccion) y se relacionará con la entidad cliente con otro ID (id_cliente). Y así puedes seguir extendiendo con tantas entidades como necesites.

Las reglas más básicas del proceso serían:
  • Cada entidad, una tabla propia.
  • Cada entidad, un ID propio.
  • Cuando relaciones una entidad con otra, usa sus IDs.
Si se te hace muy complicado, busca por Internet algún curso básico de bases de datos relacionales y así aclararás todos los conceptos. Porque si no tienes clara la base, a medida que crezca tu proyecto vas a ir metiéndote más y más en un problema. Vale más hacer un pausa y dedicar unos días a aprender esas bases. Créeme: a la larga ahorrarás tiempo y problemas. Verás cómo desarrollas tu BD más rápido y con todo clarito en tu cabeza.

¡Un saludo!
 
¡Muchas gracias!, me diste una buena guía para seguir investigando. 😎
 
Me alegro de que te sea de utilidad.

Verás como en nada de tiempo lo dominas 👌
 
multiadquirente
 
simplemente un campo que diga a quién le pertenece el dato y listo
tabla -> cliente
tabla -> usuarios con un campo id_cliente
tabla -> ventas con un campo id_cliente, así al usuario solo se le mostrada las ventas del id_cliente al cual el fue asignado