Estoy creando una página web para hacer apuestas en todos los partidos del próximo torneo de fútbol Euro 2012. Necesita ayuda para decidir qué enfoque tomar para la fase eliminatoria.
He creado una maqueta a continuación, con la que estoy bastante satisfecho cuando se trata de almacenar los resultados de todos los partidos de la fase de grupos "conocidos". Este diseño hace que sea muy fácil verificar si un usuario ha realizado una apuesta correcta o no.
Pero, ¿cuál es la mejor manera de almacenar cuartos y semifinales? Esos partidos dependen del resultado en la fase de grupos.
Un enfoque que pensé fue agregar TODOS los partidos a la matches
mesa, pero asignar diferentes variables o identificadores a los equipos locales / visitantes para los partidos en la fase eliminatoria. Y luego tenga otra tabla con esos identificadores asignados a los equipos ... Esto podría funcionar, pero no se siente bien.
fuente
Respuestas:
Comenzaría intentando arreglar toda la información predeterminada en el modelo en sí, incluyendo
Parte de esta información será datos en tablas, parte será lógica codificada en vistas.
Algo como esto quizás:
La información como la que juegan los equipos en la Q1 nunca necesita ser almacenada directamente porque puede calcularse a partir de los resultados de la etapa grupal. Los únicos cambios a realizar a medida que avanza el torneo son inserciones en la
result
mesa.fuente
Creo que usar la identificación del equipo es el camino correcto. Otro nivel de abstracción para todas las rondas finales solo agrega complejidad innecesaria para no obtener muchos beneficios además de precargar la tabla de coincidencias con datos.
La estructura de datos se ve bastante sólida para soportar esto. Los cuartos y semifinales tendrían que agregarse a la tabla de coincidencias una vez que los resultados de la coincidencia inicial estén incluidos. Si las coincidencias se asignan aleatoriamente, esta es una operación manual, sin embargo, si están en un orden particular ...
... entonces esto podría hacerse con una consulta. Nuevamente, la complejidad de la consulta puede no valer la pena dependiendo del número de equipos.
fuente
Es una buena idea almacenar todas las coincidencias en la tabla "coincidencias". Sin embargo, le agregaría un campo adicional de "clasificación", porque más tarde lo necesitará para construir un árbol binario para consultar eficientemente la tabla en la memoria. Es un problema clásico de algoritmo de clasificación y puede buscar en google el torneo de código gris para obtener más información o consultar mi historial de stackoverflow. Básicamente un torneo es un árbol binario. Aquí hay un buen artículo sobre códigos grises: http://villemin.gerard.free.fr/Wwwgvmm/Numerati/CodeGray.htm . Lamentablemente es francés. Aquí se explica cómo generar un árbol binario a partir de la clasificación: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068 .
fuente