Ir al contenido

publicidad

Foto

Logros & Tablas MySQL


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
5 respuestas en este tema

  • Btc

  • Valefor

  • vida restante: 100%
  • Registrado: 15 oct 2007
  • Mensajes: 1.932
#1

Escrito 01 julio 2011 - 16:47

Buenas a todos. Veréis, estoy trabajando en un sistema tipo steam, que maneja logros de varios juegos a la vez. El problema es que no se muy bien como plantear los logros de cada juego en la base de datos (MySQL, host web).

La idea que he tenido, es hacer esto:

Una tabla para cada juego. En la tabla, 1 columna de ID, 1 columna de Usuario, y resto de columnas cada logro correspondiente.

-> Problemas: 1 Tabla para cada juego.
-> Beneficios: Fácil modificación para quitar / añadir logros. Fácil añadir una fila de valores de ID 00 y Usuario vacio, que se sirva para añadir descripciones a los logros.


El problema es que no termina de convencerme, y no se exactamente como plantearlo. Agradecería mucho cualquier idea / experiencia que tengais sobre esto.

Un saludo, Btc :-)

Todos deseamos lo que no podemos alcanzar

 

76561197991656952.png


  • Ollydbg

  • Bahamut

  • vida restante: 100%
  • Registrado: 05 sep 2008
  • Mensajes: 6.259
#2

Escrito 01 julio 2011 - 21:18

Yo lo haría así:

[code:1]
--- Tabla Logros Juego "1" ---
CampoID | NombreLogro
1 | El anillo rúnico
2 | El Lobo Feroz
4 | Pescando atún
8 | Corre corre que te pillo
16 | Maestro en amasar panes
32 | Hechizada
64 | Buscando el pergamino
[/code]
[code:1]
--- Tabla Logros Juego "2" ---
CampoID | NombreLogro
1 | No sin mi poney
2 | Maestro en runas de fuego
4 | Azotador supremo
8 | Sin bufos y a lo loco
16 | El horda bueno, el horda muerto
[/code]
[code:1]
--- Tabla Logros Juego "3" ---
CampoID | NombreLogro
1 | Chocolate y bollos, allys al hoyo
2 | Maestro en runas de escarcha
4 | Maestro en mascotas
8 | No sin mi vaca
[/code]
Puedes hacerte una idea que para los otros 2834 juegos las tablas son de ese estilo
Fíjate que los IDs de los campos son potencias de 2, luego verás el porque

Luego tendría esta otra tabla
[code:1]
--- Tabla de juegos ---
CampoID | Nombre
1 | Super Kario Broz
2 | Space Invaders Ultimate
3 | B-Mitrilo
4 | B-Mitrilo Pro Edition
5 | Picachu and friends
6 | La maldición de los pokemos
7 | Los gremlis: El remake
8 | Michelangelo, la tortuga mutante
9 | Tower Defense Reload
[/code]

Podríamos tener también una tabla de jugadores, algo como así:
[code:1]
--- Tabla de jugadores ---
CampoID | Nombre
1 | Ollydbg
2 | Btc
3 | Ellolo17
4 | Sr.Azul
5 | TheHans
[/code]

Finalmente tendría una única tabla donde se guardan los logros conseguidos por cada jugador. Sería algo así:
[code:1]
--- Tabla de Logros ---
PK(autonum) | IDJuego | IDJugador | Logros
1 | 1 | 1 | 35
2 | 2 | 1 | 0
3 | 3 | 1 | 3
4 | 1 | 2 | 17
5 | 2 | 2 | 7
[/code]

Explicación para "torpes":

[code:1]
PK(autonum) | IDJuego | IDJugador | Logros
1 | 1 | 1 | 35
[/code]
Juego: Super Kario Broz
Jugador: Ollydbg
Logros: 35
35 en binario se descompone así: 1 0 0 0 1 1
Por lo tanto tendríamos los siguientes logros del juego "1":
- El anillo rúnico
- El Lobo Feroz
- Hechizada

Explicación para "torpes" #2:
[code:1]
PK(autonum) | IDJuego | IDJugador | Logros
2 | 2 | 1 | 0
[/code]
Juego: Space Invaders Ultimate
Jugador: Ollydbg
Logros: ninguno

Explicación para "torpes" #3:
[code:1]
PK(autonum) | IDJuego | IDJugador | Logros
4 | 1 | 2 | 17
[/code]
Juego: Super Kario Broz
Jugador: Btc
Logros: 17
17 en binario se descompone así: 1 0 0 0 1
Por lo tanto tendríamos los siguientes logros del juego "1":
- El anillo rúnico
- Maestro en amasar panes


Sería tremendamente simple hacer una instrucción SQL (para nada compleja) para mostrar una tabla tal que así (en php, asp o lo que sea):

[code:1]
------ Super Kario Broz ------
|---------- Ollydbg ----------|
El anillo rúnico | x |
El Lobo Feroz | x |
Pescando atún | |
Corre corre que te pillo | |
Maestro en amasar panes | |
Hechizada | x |
Buscando el pergamino | |
-------------------------------
[/code]

Finalmente, cuando saques algún parche que incluya nuevos logros únicamente tendrás que hacer un "insert" en la tabla "Logros juego 'x'" para añadir nuevos logros.
Si la estructura de la base de datos la haces como he indicado arriba ni siquiera tendrás que cambiar el código de tu juego para gestionar esos nuevos logros. ¿A que mola, eh? X-D X-D X-D

Bueno, esta forma es lo primero que se me ha ocurrido.
Exijo mi sugus de piña!

Saludos.

Editado:

Meeecc..Error. Los logros, en lugar de estar en tablas independientes sería más comodo tener una tabla tal que así:
[code:1]
--- Tabla Logros ---
JuegoID | CampoID | NombreLogro
1 | 1 | El anillo rúnico
1 | 2 | El Lobo Feroz
1 | 4 | Pescando atún
1 | 8 | Corre corre que te pillo
1 | 16 | Maestro en amasar panes
1 | 32 | Hechizada
1 | 64 | Buscando el pergamino
2 | 1 | No sin mi poney
2 | 2 | Maestro en runas de fuego
2 | 4 | Azotador supremo
2 | 8 | Sin bufos y a lo loco
2 | 16 | El horda bueno, el horda muerto
3 | 1 | Chocolate y bollos, allys al hoyo
3 | 2 | Maestro en runas de escarcha
3 | 4 | Maestro en mascotas
3 | 8 | No sin mi vaca
[/code]

De esa forma, la sintáxis de los "inner join" son mucho más fáciles.

  • malditis

  • Neonate

  • vida restante: 100%
  • Registrado: 07 feb 2006
  • Mensajes: 68
#3

Escrito 01 julio 2011 - 22:35

@Ollydbg
Iba a sugerir esa misma disposición para los logros en una única tabla, lo de una tabla por cada juego para los logros no me convencía...

Así que con ese ajuste final me parece un buen punto de partida... buen post ... ;)

  • Petertos

  • Childrer

  • vida restante: 100%
  • Registrado: 03 jun 2007
  • Mensajes: 30
#4

Escrito 02 julio 2011 - 09:39

Si usas una única tabla, luego la puedes ir aumentando sin tener que desperdiciar ni modificar código anterior.

Así que lo de usar una única tabla está bien.

Ahora los programadores somos así y no siempre se hace lo óptimo. Lo otro también podría funcionar.

  • Gagle

  • Yojimbo

  • vida restante: 100%
  • Registrado: 22 mar 2008
  • Mensajes: 9.856
#5

Escrito 02 julio 2011 - 12:58

Yo meteria todos los logros en la misma tabla con una fk que apunte hacia la pk del juego. Las optimizaciones se deben dejar que las haga el gestor de la base de datos. Para administrar las tablas deberias crearte una pagina en lugar de modificarla a mano. Las optimizaciones del programador se hacen a nivel de query, no a nivel interno de la base de datos, tan solo fijate que cumplas las formas normales cuando hagas el diseño relacional.

Eso de crear tablas dinamicamente una vez ya esta todo montado y diseñado no me gusta un pelo porque despues vas a tener problemas con las queries, constraints (restricciones), alteraciones de tablas, actualizaciones, etc.


Imagen EnviadaImagen Enviada
Committing suicide to free the zombie!
Human knowledge belongs to the world
"640KB ought to be enough for anybody" (Bill Gates, 1981)


  • Btc

  • Valefor

  • vida restante: 100%
  • Registrado: 15 oct 2007
  • Mensajes: 1.932
#6

Escrito 02 julio 2011 - 19:41

Tomando nota de todo. ¡Muchas gracias!
Me gusta esa idea de logros mediante descomposición binaria, asi no tengo que volverme loco con marcar campos distintos para cada uno.

Saludos! y gracias de nuevo :D

Todos deseamos lo que no podemos alcanzar

 

76561197991656952.png



Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad