Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Consulta. Interactuar Objetos con Tablas de BD.

Estas en el tema de Consulta. Interactuar Objetos con Tablas de BD. en el foro de Bases de Datos General en Foros del Web. Buenas, abro el tema aqui, porque estoy programando con POO en PHP, ahora bien, mi consulta radica en lo siguiente... yo tengo varias clases, y ...
  #1 (permalink)  
Antiguo 13/05/2009, 18:43
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 17 años, 3 meses
Puntos: 5
Consulta. Interactuar Objetos con Tablas de BD.

Buenas, abro el tema aqui, porque estoy programando con POO en PHP, ahora bien, mi consulta radica en lo siguiente...

yo tengo varias clases, y como es de esperarse, dentro de clases, se crean instancias de otras clases y asi ...

por otro lado, tengo una base de datos, con una tabla con usuarios y passwords, esto en un principio permitiria el login de los usuarios, pero ahora bien, los usuarios entran al sistema, se logean, y pueden cargar cierto tipo de informacion.

ahi es donde las clases comenzarian a interactuar ...

ahora bien, que me recomiendan hacer, para poder almacenar esos objetos creados, y que queden referenciados a ese usuario especifico ?

supongan que el usuario pone datos y tiene ...
Instancia de la clase Mochila -> contiene un Vector de Items, los cuales son instancias de clase Items. que contiene ciertos datos.

ahora bien, cada usuario debe de tener su mochila, y quisiera quizas guardarle en una BD, y que otro dia se logueen y puedan consultar digamos.
  #2 (permalink)  
Antiguo 13/05/2009, 18:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Pues es como en una BD relacional, tienes que guardar de cierta forma el ID del usuario al que le pertenece esa "Mochila", de lo contrario no vas a poder diferenciar.

Si lo quieres ver desde nivel solo POO, cada Usuario tiene una propiedad que es la Mochila y esa Mochila tiene un arreglo de Items.

Saludos.
  #3 (permalink)  
Antiguo 15/05/2009, 11:23
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 17 años, 3 meses
Puntos: 5
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

a ver, pero la "mochila" con su arreglo y todo, donde quedaria guardada ? ... porque digamos, yo tengo mi DB con los usuarios y las passwords, pero no sabria donde guardar la mochila, o como, se me ocurre crear dinamicamente una tabla cada vez que se crea un usuario, y esa tabla representa la lista de items, y sus caracteristicas, pero no se si es correcto crear una tabla por cada usuario, y si no lo hago asi, al cerrar el navegador, por mas que este hecho con POO la informacion se perderia si no la almaceno en algun lado D:
  #4 (permalink)  
Antiguo 15/05/2009, 13:45
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

No, eso es un error en el diseño de tu Base de Datos, a nivel datos lo que haces es una tabla usuarios, una tabla mochilas y una tabla items, donde mochila tiene un foreign key que es el id de usuario y items un foreign key que es la mochila.

Saludos.
  #5 (permalink)  
Antiguo 15/05/2009, 22:01
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 17 años, 3 meses
Puntos: 5
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

ah joya, osea que en total solo tendria 3 tablas.
usuarios - mochila - items.

podrias decirme el titulo a buscar o algun concepto asi fundamental que tenga que buscar para entender bien bien, este tema de las foreign keys, y asi poder abrirme el bocho con este tema ??

desde ya muchas gracias por la ayuda.
  #6 (permalink)  
Antiguo 16/05/2009, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Simplemente busca y lee sobre base de datos relacionales, es el concepto minimo que tienes que conocer antes de hacer un sistema con bases de datos, dejate que sea con POO, ya que si no conoces como hacer un buen diseño de bases de datos, por mas que uses patrones de diseño OO, vas a acabar con un mal sistema.

Saludos.
  #7 (permalink)  
Antiguo 16/05/2009, 13:25
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Lastimosamente no pude agregar imágenes para explicarlo mejor.
Pero el diseño de la Base de datos, sería algo así:

Lo que podrías hacer es crear 3 tablas.
Usuarios, Mochila e Items

Tabla Usuarios:

id_usuario (clave primaria)
nombre_usuario
password
id_mochila (clave secundaria)


Tabla Mochilas (clave compuesta id_mochila + id_item):

id_mochila
id_item


Tabla Items:

id_item (clave primaria)
contenido
  #8 (permalink)  
Antiguo 16/05/2009, 14:08
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 17 años, 3 meses
Puntos: 5
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

muchas gracias por los consejos, voy a leer y a ponerme bien en el tema, asi puedo hacerlo todo lo mas correcto posible y sacarle el mayor provecho al tema.

desde ya gracias a ambos ^^
  #9 (permalink)  
Antiguo 16/05/2009, 16:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Es mejor si id_usuario es una clave foranea en mochila, en lugar de que sea parte de id_usuario, ya que asi dejas más limpio la tabla de usuarios.

Saludos.
  #10 (permalink)  
Antiguo 16/05/2009, 16:55
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Si, es mejor.
Pequeño error de diseño.
  #11 (permalink)  
Antiguo 19/05/2009, 13:51
Avatar de Hiruma-Sama  
Fecha de Ingreso: agosto-2007
Ubicación: Floresta, Buenos Aires, Argentina.
Mensajes: 234
Antigüedad: 17 años, 3 meses
Puntos: 5
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

buenas, disculpen la tardanza quizas en responde, pero recien ayer y hoy me sente a leer sobre bases de datos relacionales y mas o menos creo yo que voy captando la idea, pero me quiero sersiorar, creo que en definitiva mis tablas quedarian asi:

Tabla Usuarios:

id_usuario (clave primaria)
nombre_usuario
password

Tabla Mochilas:

id_mochila (clave primaria)
id_item (foranea) //Mi problema aqui vendria a ser, que no hay un solo item asignado a la mochila, seria una lista de items, y con cada uno, su determinada cantidad.
id_usuario (foranea)
cantidad_de_cada_item //Aqui es mi mayor duda, puesto que en cada mochila, podra haber variados items, pero de cada uno puede haber varios, supongamos "remeras", pero necesitaria saber la cantidad de remeras...


Tabla Items:

id_item (clave primaria)
nombre // seria el nombre que posee el objeto.
contenido // seria una descripcion de lo que es/hace el Objeto.
  #12 (permalink)  
Antiguo 19/05/2009, 14:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Te muevo al foro de Bases de Datos para que te asesoren mejor.

Saludos.
  #13 (permalink)  
Antiguo 13/06/2009, 06:46
 
Fecha de Ingreso: mayo-2009
Mensajes: 4
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Consulta. Interactuar Objetos con Tablas de BD.

Cita:
Iniciado por Hiruma-Sama Ver Mensaje
buenas, disculpen la tardanza quizas en responde, pero recien ayer y hoy me sente a leer sobre bases de datos relacionales y mas o menos creo yo que voy captando la idea, pero me quiero sersiorar, creo que en definitiva mis tablas quedarian asi:

Tabla Usuarios:

id_usuario (clave primaria)
nombre_usuario
password

Tabla Mochilas:

id_mochila (clave primaria)
id_item (foranea) //Mi problema aqui vendria a ser, que no hay un solo item asignado a la mochila, seria una lista de items, y con cada uno, su determinada cantidad.
id_usuario (foranea)
cantidad_de_cada_item //Aqui es mi mayor duda, puesto que en cada mochila, podra haber variados items, pero de cada uno puede haber varios, supongamos "remeras", pero necesitaria saber la cantidad de remeras...


Tabla Items:

id_item (clave primaria)
nombre // seria el nombre que posee el objeto.
contenido // seria una descripcion de lo que es/hace el Objeto.

Respondo casi 1 mes después, pero quizás te sirva.

La tabla Mochilas: es allí en donde está tu poblema.
Tenés id_mochila como clave primaria, id_item como clve foránea.

Lo que ocurriría aquí es que solo podrías insertar una mochila, con tan solo 1 item.
Si insertas la misma mochila, entonces saldrá un error (clave primaria duplicada).

Entonces la solución a esto sería crear una clave primaria compuesta entre id_mochila e id_item.
Esto te dejará agregar varios items a una misma mochila.

--------------------------------------------------------------------

Por ejemplo:

REGISTRO 1

id_mochila: 1
id_item: 1


REGISTRO 2

id_mochila: 1
id_item: 2


REGISTRO 3

id_mochila: 1
id_item: 3

--------------------------------------------------------------------


Como ves, id_mochila se repite, pero como es una clave compuesta no dará error.
Solo daría error si tu clave compuesta (id_mochila + id_item) se repite.

Por ejemplo, agregas un nuevo registro:


REGISTRO 4

id_mochila: 1
id_item: 2


Daría error ya que es lo mismo que el registro 2.


Espero haberme explicado un poco. Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:12.