Pregunta

Estoy almacenando datos sobre estadísticas de béisbol y le gustaría hacerlo con tres tablas: jugadores, battingStats y pitchingStats. A los efectos de la cuestión, cada jugador tendrá las estadísticas de bateo o estadísticas de pitcheo, pero no ambos.

¿Cómo iba a normalizar una relación en 3NF?

¿Fue útil?

Solución

playerId sería una clave externa en ambos BattingStats y mesas PitchingStats

[y recuerda a poner un poco de dimensión temporal (estación, año, et al) en las estadísticas tablas]

Y, por cierto, se trata de un supuesto mal: por lo que yo sé, los lanzadores se permite a los murciélagos, también

Otros consejos

¿Es realmente necesario no usar más de 3 mesas. Normalización normalmente implica romper un modelo no normalizado en muchas relaciones normalizadas.

Si usted puede tener más de 3 mesas, es posible que desee considerar la siguiente (en 3NF ):

Players:        ([player_id], name, date_of_birth, ...)
Batters:        ([batter_id], player_id)
Pitchers:       ([pitcher_id], player_id)
Batting_Stats:  ([batter_id, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([pitcher_id, time_dimension], stat_1, stat_2, ...)

Atributos en [] definir la clave principal, pero un sustituto clave se puede usar si se prefiere . El atributo player_id en bateadores y Parcelas debe tener una única limitación , y también debe ser un < a href = "http://en.wikipedia.org/wiki/Foreign_key" rel = "nofollow noreferrer"> clave externa a la relación de jugadores. Batting_Stats y Pitching_Stats también deben tener una clave externa a bateadores y cabeceo respectivamente.

Nota sin embargo que lo anterior no hace cumplir que un jugador puede ser sólo una masa única o una jarra.


ACTUALIZACIÓN:

Uno de los métodos que soy consciente de que lo imponen un jugador es más que un bateador o solamente un lanzador, es a través de este modelo:

Players:        ([player_id], name, date_of_birth, ...)
Roles:          ([role_id, role_type], player_id)
Batting_Stats:  ([role_id, role_type, time_dimension], stat_1, stat_2, ...)
Pitching_Stats: ([role_id, role_type, time_dimension], stat_1, stat_2, ...)

El role_type debería definir una jarra o una pasta. Batting_Stats y Pitching_Stats deben tener una clave externa compuesta a roles utilizando (role_id, role_type). Una restricción única en player_id en roles se aseguraría de que un jugador sólo puede tener uno, y sólo uno, el papel. Por último añadir restricciones de comprobación modo que Batting_Stats.role_type = 'Batter' y Pitching_Stats.role_type = 'Pitcher'. Estos garantía de cheques restricción de que Batting_Stats siempre está describiendo un bateador, y tenga en cuenta una jarra. Lo mismo se aplica para Pitching_Stats.

Yo sé cómo podría aplicar esto desde una perspectiva práctica (que crearía una vista unioned sobre las mesas disjuntos y poner un índice único en el reproductor de identificación - por lo tanto, sólo pueden aparecer en una tabla).

O en la tabla de jugadores, ficha qué tipo de estadísticas que tienen, y luego se lo incluya en la relación FK partir de las tablas estadísticas.

Sin embargo, ninguno de estos es probablemente más cercano al metal de lo que desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top