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

Diseño de base de datos para inventario de video juego.

Estas en el tema de Diseño de base de datos para inventario de video juego. en el foro de Mysql en Foros del Web. Hola! Me estoy aventurando en programar un video juego mas complejo que los que he programado hasta ahora, y en este momento me encuentro en ...
  #1 (permalink)  
Antiguo 17/02/2012, 22:10
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 13 años, 10 meses
Puntos: 95
Diseño de base de datos para inventario de video juego.

Hola!

Me estoy aventurando en programar un video juego mas complejo que los que he programado hasta ahora, y en este momento me encuentro en la etapa de diseño.

Me surgió un pequeño problema al diseñar el inventario de los usuarios, ya que no se exactamente cual es la mejor manera de diseñar las tablas.


Por ejemplo si tengo una tabla con items:

id, item
1, sword
2, shield
3, red potion
4, blue potion
5, green potion
6, bow
7, slingshot

Y la tabla para cada usuario:

id, username
1, john1
2, john2
3, john3
4, john4
5, john5
6, john6

Pensé que podría crear otra tabla llamada "inventario" en el cual mantuviera la relación de cual usuario, tiene cual item, y cuantos items tiene.

user_id, item_id, quantity
1, 1, 1 // john1 tiene una espada
1, 3, 2 // john1 tiene 2 pociones rojas.
2, 2, 1 // john2 tiene un escudo
2, 6, 1 // john2 tiene un arco

Sin embargo, de inmediato se daran cuenta que para empezar viola una de las reglas de normalización de las bases de datos, que es la de evitar records repetidos. Ademas de que conforme la tabla vaya creciendo, el desempeño de la tabla no será optimo.

Asi que despues pensé que la tabla de usuarios, podría tener un campo llamado inventario, y la cual contuviera los items del usuario separados por comas, asi dentro de la programación puedo tratar esa información como un CSV.

Sin embargo, bajo esta circunstancia, no logro encontrar una solución optima para mantener un record de la cantidad de items que determinado usuario tiene.


id, username, inventory
1, john1, (1,2,3,5)
2, john2, (2,1,3)
3, john3, (4,2)


Asi que me pregunte si alguno de ustedes ha tenido una situación similar a esta?
Algun tip o recomendacion?

He pensado que quizá, si la tabla de usuarios tiene el campo "inventario" y en lugar de un array de numeros, hago un array de puntos, en donde cada punto almacena el item_id y la cantidad. Algo como:

id, username, inventory
1, john1, ((1,1),(2,2),(3,1),(5,1))
2, john2, ((2,1),(1,1),(3,10)
3, john3, ((4,1),(2,2))
  #2 (permalink)  
Antiguo 18/02/2012, 02:12
 
Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 2 meses
Puntos: 6
Respuesta: Diseño de base de datos para inventario de video juego.

Cita:
Iniciado por AlanChavez Ver Mensaje
Pensé que podría crear otra tabla llamada "inventario" en el cual mantuviera la relación de cual usuario, tiene cual item, y cuantos items tiene.

user_id, item_id, quantity
1, 1, 1 // john1 tiene una espada
1, 3, 2 // john1 tiene 2 pociones rojas.
2, 2, 1 // john2 tiene un escudo
2, 6, 1 // john2 tiene un arco

Sin embargo, de inmediato se daran cuenta que para empezar viola una de las reglas de normalización de las bases de datos, que es la de evitar records repetidos. Ademas de que conforme la tabla vaya creciendo, el desempeño de la tabla no será optimo.
Esta es la buena. No viola ninguna regla porque la relación usuario items es de N:M y necesitas una tabla intermedia para enlazar.

En la tabla intermedia pones user_id y item_id como campos claves (ambos). A la hora de insertar un elemento en el inventario compruebas si los tiene (WHERE user=1 AND item=1) En caso positivo sumas 1 a la cantidad. En caso negativo insertas un item nuevo.
__________________
Si quieres conseguir resultados diferentes no hagas siempre lo mismo.

Mejora tu entorno. MestralCadiz con su comunidad.

Etiquetas: diseño, inventario, tabla, video, campos
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 22:02.