Base de datos multiples

309 views
Skip to first unread message

Damian Fernandez

unread,
Jul 29, 2010, 1:53:21 PM7/29/10
to codeignit...@googlegroups.com
Hola gente tengo un problema el cual me gustaria uqe me ayuden a  solucionar.
adjunto una imagen (sistema.jpg) para poder clarificar mejor la explicacion.


Explicacion:

Estoy desarrollando un sistemas de turnos online.
La aplicacion es muy sencilla, Basicamente cada usuario al loguearse en el sistema obtiene el nombre de su
base de datos en donde tiene a sus pacientes y turnos. es decir que cada usuario tiene una base de datos propia.


EL problema:

No se como manejar esta situacion en donde el nombre de la base de datos no la tengo de antemano para poder
configurala en dadabase.php, es decir que se obtiene al logearse en  db_sistema
(esta es la base de datos del sistema en donde se guarda la tabla usuario en donde se encuentra el nombre de la bd de cada uno).

Es decir que todos los usuarios ejecutan la misma aplicacion www.sistematurnos/turnos , pero cada uno tiene una base de datos distinta.
y es esto lo que no se manejar dentro de la aplicacion.
yo pense en usar variable de sesion o algo asi en donde ese registre el nombre de la base de datos del usuario al momento de logearse

Bueno espero haber sido claro con la explicacion. y encontrar la solucion a este problema con el oporte del foro

Muchas Gracias Damian.
sistema.jpeg

<<P431i7o>>

unread,
Jul 29, 2010, 2:10:35 PM7/29/10
to codeignit...@googlegroups.com
podrias modificar el comportamiento de la base de datos extendiendo en una libreria tuya como se explica en
http://codeigniter.com/user_guide/general/creating_libraries.html

con lo cual podrias tener mas de un resource conectado a varias base de datos..

Es una idea...
Saludos Cordiales
---------------------------------------------
Pablo F.Ruiz Diaz Rios
Desarrollo Web con tecnologias de PHP, MySQL, AJAX (aunque tecnicamente ajax no es una nueva tecnologia,sino, la combinacion de varias)
messenger: http://tinymailto.com/p431i7omsn

PROTEGE TU RED:

     Compartimos mensajes. Así que POR FAVOR, si vas a realizar un reenvío de este correo o cualquier otro recibido, BORRA mi dirección de correo y todas las direcciones de correo que aparezcan en los textos.
    Proteje las direcciones de  tus amigos y la mía, enviando solo como CCO o BCC, Con copia oculta y NO PARA, ni CC: para evitar que usen nuestras direcciones y recibir correos no deseados, virus, spam etc.



--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.

Carlos Betancourt Carrero

unread,
Jul 29, 2010, 2:15:37 PM7/29/10
to codeignit...@googlegroups.com
Saludos Damián,
Éste tipo de modelo es poco óptimo. El modelo relacional te permite realizar éste tipo de aplicaciones usando una sola BD.

CI permite conectarte a varias bases de datos, inclusive usando distintos motores.

Pero te recomiendo repensar el esquema relacional. Te facilitará el mantenimiento y la escalibilidad de la aplicación. Si necesitas ayuda, estoy a la orden.

Salu2..

2010/7/29 Damian Fernandez <dam...@gmail.com>

--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.



--
Carlos Betancourt Carrero
Web Designer & Developer
http://betacar.com.ve | @betacar

Damian Fernandez

unread,
Jul 29, 2010, 2:21:03 PM7/29/10
to codeignit...@googlegroups.com
si necesito ayuda.
yo lo pense asi porque el tema es que cada usario va a tener su propia db es decir esto es como si fuera un reseler de un hosting, es mucho mas facil de manterner y no mezclar todo en una unica db por eso es que cuando creo una cuenta de usuario creo un db para ese usuario con sus datos, por lo menos asi lo veo yo

Damian.

<<P431i7o>>

unread,
Jul 29, 2010, 2:29:30 PM7/29/10
to codeignit...@googlegroups.com
si puedes, te conviene tenerlo todo en la misma base de datos, seria lo optimo. aunque entiendo tu punto de vista de que parece ser mas sencillo administrar, pero si lo que quieres hacer es vender el mismo producto a todos,pues te conviene centralizar y en caso de un upgrade al sistema solo necesitaras hacerlo a una bd.

Ahora si el caso puede ser de que algunos te piden cosas diferentes con el tiempo, osea el desarrollo puede no ser igual para unos u otros, pues tendras que separar las bd, eso desde mi punto de vista.

aunque puedes hacer un intermedio.
que es el nombre de usuario, como prefijo de la tabla
entonces cuando das inicializar a un nuevo usuario creas las tablas para ese usuario, y si tienes que hacer un desarrollo especifico para alguno de ellos no se recienten los cambios en los demas.
y no tienes que crear millones de bd, es mas administrable, y no necesitaras crear chorrocientas bases de datos.

hasta ahora no he necesitado usar dos bases de datos, ano ser que sea hacer una migracion de una a otra, pero ams que eso, para algo estable nop.



Saludos Cordiales
---------------------------------------------
Pablo F.Ruiz Diaz Rios
Desarrollo Web con tecnologias de PHP, MySQL, AJAX (aunque tecnicamente ajax no es una nueva tecnologia,sino, la combinacion de varias)
messenger: http://tinymailto.com/p431i7omsn

PROTEGE TU RED:

     Compartimos mensajes. Así que POR FAVOR, si vas a realizar un reenvío de este correo o cualquier otro recibido, BORRA mi dirección de correo y todas las direcciones de correo que aparezcan en los textos.
    Proteje las direcciones de  tus amigos y la mía, enviando solo como CCO o BCC, Con copia oculta y NO PARA, ni CC: para evitar que usen nuestras direcciones y recibir correos no deseados, virus, spam etc.



Carlos Betancourt Carrero

unread,
Jul 29, 2010, 2:32:51 PM7/29/10
to codeignit...@googlegroups.com
Si, pero debes recordar que debes mantener siempre, como punta de lanza, el mantenimiento y escalabilidad de la aplicación. Supon que tienes que agregar, o eliminar, un campo o una tabla de todas las bases de datos de todos los usuarios de la aplicación, y son mil usuarios. O, por otro lado, debes indexar las tablas de las bases de datos de todos los usuarios ¿Cuántas horas hombre se irían allí? ¿Cuánto recurso, de hardware, se iría?

Por lo que veo en el esquema que enviaste, lo que está separando las BD's es el id_usuario. Éste lo puedes relacionar fácilmente con las demás tablas, usando un foreign key. No es difícil.

Salu2...

2010/7/29 Damian Fernandez <dam...@gmail.com>
http://betacar.com.ve | @betacar | (+58414) 8771552

Matias Garat Ortiz

unread,
Jul 29, 2010, 2:35:16 PM7/29/10
to CodeIgniter-spanish
Coincido con lo dicho por otros, es recomendable hacer solo una db, y
relacionar dentro de ella. Digamos por ejemplo, Usuario_1 tiene
asignado en Turno_4 a pacientes[1,3,7,8], donde si vamos al caso,
pacientes y usuarios son personas, que solo cumplen distintos roles...
en fin, si queres, y proporcionas algo mas de info podriamos armar un
poco el modelo de datos.

Saludos

Damian Fernandez

unread,
Jul 29, 2010, 2:37:55 PM7/29/10
to codeignit...@googlegroups.com
Si seguro eso lo entendi, el tema era que tenia el la cabeza que es mas fracil separar los datos para cada usuario creando su su propia db que ponerlos todos juntos en la misma db, ademas pensaba que era mas facil buscar en una tabla pequeña de paciente que en una general en dodne estan todos los pacientes de cada usuario. por ahi venia mi planteo

Dragan Ardala

unread,
Jul 29, 2010, 2:46:44 PM7/29/10
to codeignit...@googlegroups.com
Si lo quieres hacer como si fuera un reseler de un hosting puede que sea mejor la opción de crear varias bdd, de cualquier modo te deberias poder conectar sin ningún problema utilizando $myDB = $this->load->database($dsn); donde $dsn es un string con tu conexión pe. driver://username:password@hostname/database (mysql://usuario:contrasena@localhost/db1),

salu2
Reply all
Reply to author
Forward
0 new messages