Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/02/2012, 22:10
AlanChavez
 
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))