Pregunta

Tengo 2 tablas de bases de datos: Equipos y Juegos

.

A los efectos de esta pregunta, se trata de los equipos y los partidos de fútbol (fútbol).

Cada juego tiene exactamente 2 equipos, generalmente un equipo local y un equipo de salida aunque en ocasiones ambos equipos pueden ser neutrales.

Mi pregunta es si debería representar esta relación de datos usando 2 llaves extranjeras en la mesa de juegos (home_team_id, away_team_id) o si debería usar una relación de muchos a muchos con una mesa games_teams para enlazar los dos, en cuyo caso yo tendría que almacenar también si el equipo fue el hogar o equipo visitante y parece un poco exagerado.

Para aumentar la confusión, estoy usando las librerias de ORM en KohanaPHP y estos esperaría una FK a ser llamado team_id o una tabla de enlace para contener sólo 2 columnas. Si usted tiene experiencia con este problema en KohanaPHP, por favor, dejar una respuesta, de lo contrario ningún consejo general es también muy apreciada.

¿Fue útil?

Solución

Si usted quiere ser capaz de precisar una insignia "Xº Forma Normal" en el servidor de base de datos, entonces debería probablemente ser tratado como muchos-a-muchos, de lo contrario, debería pensar que va a reducir sus gastos de consulta con 1 menos tabla que sólo vamos a unirse a través de todos vez que quieren algunos datos útiles cabo.

Otros consejos

Sólo tiene que utilizar las dos columnas, de lo contrario usted acaba necesita para calificar en la mesa de carpintero. No es como si se trata de una bomba de tiempo de dormir y de repente un día descubrirá que necesita tener una verdadera muchos a muchos.

2 columnas es perfectamente apropiado en este caso, en mi opinión. El hecho de que no sólo puede ser posiblemente dos equipos para cualquier juego se refleja en el esquema de base de la existencia de dos columnas. Mediante la introducción de una mesa de enlace, se introduce la posibilidad de que un solo juego podría tener 2 equipos de casa, 2 equipos de distancia, y que se necesita una validación adicional para asegurar que esta situación no se produce nunca. Al mantener las cosas aisladas a las dos columnas, el esquema fuerza inherentemente integridad de los datos.

En cuanto a la normalización: Sí. Sólo hay uno-a-muchos o muchos-a-muchos que se descompone en una o más relaciones de uno a muchos.

Pero hablando de forma realista, si tuviera que salvar algo así como el género. ¿Me realmente necesita un multi-estado y un sello de fecha y hora se adjunta al presente?

La sorprendente respuesta es SI - pero sólo si necesito realizar un seguimiento de los cambios de género por razones de negocios -. A efectos prácticos, la respuesta es NO

Me gustaría mantener una tabla con dos llaves -. A menos que haya una razón de negocios para realizar un seguimiento como tal

En función de cómo haya abstraído, yo diría que el juego de fútbol debe tener dos equipos, en cuyo caso tiene las columnas en la tabla de juego no es sólo más conveniente, es más correcto.

Yo podría imaginar que son partes naturales de la identificación del equipo de la clave principal del juego.

Totalmente cree que no debe tener una tabla separada para esto. Más fácil para el programador, más fácil en el DB. Es bueno pensar en el qué pasaría si, pero suena como que ya tiene. No se deje atrapar pensar que la normalización es siempre el camino a seguir para todo.

Yo respeto las respuestas de la otra en decir que el uso de las dos columnas es la mejor opción, sin embargo, se menciona que está utilizando en el ORM en Kohana. Mediante el uso de dos columnas en la tabla de juegos se pierde la cuenta ORM para las relaciones de muchos a muchos. Si configura una mesa games_teams pivote, puede hacer lo siguiente:

$game = ORM::factory('game', 1); // 1 is the game id

A continuación, puede recorrer los equipos en ese juego:

foreach ($game->teams as $team) {
// do stuff with $team
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top