Comunidad de diseño web y desarrollo en internet online

Estructura de la BD

Citar            
MensajeEscrito el 20 Abr 2013 12:02 pm
Buenas, estoy creando una aplicacion web, y necesito saber como estructurar bien la base de datos.

Se trata de 40 juegos, muy simples. En los que Juan (usuario ejemplo) puede repetir cuantas veces quiera. Y cuya puntuacion se guarda en la base de datos, si en la siguiente partida la supera, se hace un update para guardad la mejor.

Los usuarios deben registrarse.

Despues el usuario puede ver en cada juego, su puntuacion, y elk usuario que consiguio la siguiente puntuacion, ej: Juan consigue 1000 puntos en uno de los juegos, se hace el update para guardarlo, y luego se hace un select para encontrar el que hizo por ejemplo 1001.

La cuestion es que yo lo quise hacer lo mas simple posible, todo en una sola tabla, con las siguientes filas:

id / Nombre / password / puntosjuego1 /puntos juego 2/ etc... hasta 40
1
2
.
.
.

Lo que comentando problemas, me dijeron que esta estructura literalmente es una mierda ;)

Tambien se podria todo en tablas distintas, tabla usuarios, y tabla por cada juego, o una dila por cada partida jugada.. Vamos que ni idea de como optimizar bases de ddatos :)

Haber si me ayudais como hacerlo mejor.

Por Phyronx

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Abr 2013 07:45 pm
El problema que planteas tiene al menos una ambigüedad. Dices que quieres mostrar que Juan tiene 1000 puntos y además a Pedro que tiene 1001, pero Pedro no necesariamente es el único con 1001 puntos en ese juego en particular, Sofia (que es muy buena jugadora), también tiene 1001 puntos, igual que Pedro. ¿a quién de los dos vas a mostrar?.

Para saber cómo armar correctamente una base de datos, te recomiendo que leas sobre Normalización de Bases de Datos Relacionales. Así sabrás por qué te dijeron que lo que estabas haciendo es una mierda ;).

Pero para tu caso tienes dos entidades (tablas): Jugadores y Juegos.
Y debes tener otra tabla que relacione Jugadores con Juegos.

Jugadores
ID Nombre ... otros campos
1 Juan ...
2 Pedro ...
3 Sofia ...

Juegos
ID Nombre ... otros campos...
1 Pac-Mac
2 Akanoid ...
3 Donkey-Kong ...

JugadoresXJuegos
Id_jugador id_juego puntos
1 1 1000
1 2 589
2 1 1001
2 3 8765
3 1 1001

A la pregunta ¿cuántos puntos tiene el Jugador Juan en el Juego "pac-man"?

Código MySQL :

SELECT `puntos` FROM `JugadoresXJuegos`
WHERE `Id_jugador` = 1 AND `id_juego` = 1;


Te guardas el resultado y
¿Quién supera a Juan en el "pac-man"?

Código MySQL :

SELECT `Jugadores`.`nombre`, `JugadoresXJuegos`.`puntos` FROM `JugadoresXJuegos`, `Jugadores`
WHERE `JugadoresXJuegos`.`puntos` > 1000 AND
`JugadoresXJuegos`.`id_juego` = 1
AND `Jugadores`.`id` = `JugadoresXJuegos`.`Id_jugador`

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Abr 2013 09:36 pm
Muchisimas gracias, me empapare sobre Bases de Datos Relacionales ;)

Sobre la ultima consulta, para encontrar al contrincante, debo encontrar solo 1, con la puntuacion siguiente, pero da igual si es ana, silvia o pedro :) Contal de tener con quien picarte..

En tu consulta no lo he probado, pero supongo que te devuleve todos los que tiene mas de 1000 puntos, para encontrar un solo contrincante, podria sumarle a la consulta:

ORDER BY `JugadoresXJuegos`.`puntos` DESC LIMIT 1.

Asi acabaria seleccionando uno solo, voy por buen camino,no? :)

Bueno gracias de verdad!!

Por Phyronx

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 20 Abr 2013 10:49 pm
Sí, así es.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.