Soll wirklich nicht mehr als 3 Tabellen verwendet werden? Normalerweise bedeutet Normalization, dass ein nicht normalisiertes Modell in viele normalisierte Relationen zerlegt wird.
Wenn Sie mehr als drei Tabellen haben können, sollten Sie die folgenden (in 3NF) berücksichtigen:
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, ...)
Attribute in []
definieren den Primärschlüssel, sondern ein surrogate key verwendet werden kann, wenn bevorzugt. Das player_id
Attribut in Batters and Pitches sollte eine haben, und es sollte auch eine foreign key an die Players-Beziehung sein. Batting_Stats und Pitching_Stats sollten außerdem einen Fremdschlüssel für Batters und Pitching haben.
Beachten Sie jedoch, dass das oben genannte nicht erzwingt, dass ein Spieler nur ein Teig oder nur ein Krug sein kann.
UPDATE:
Eine Methode, die ich bin bewusst zu erzwingen, dass ein Spieler nur ein Teig oder nur ein Krug, ist durch dieses Modell:
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, ...)
Die role_type
sollte Definieren Sie einen Krug oder einen Teig. Batting_Stats und Pitching_Stats sollten einen zusammengesetzten Fremdschlüssel für Rollen mit (role_id, role_type)
haben. Eine eindeutige Einschränkung auf player_id
in Rollen würde sicherstellen, dass ein Spieler nur eine und nur eine Rolle haben kann. Schließlich fügen Sie check constraints hinzu, so dass Batting_Stats.role_type = 'Batter'
und Pitching_Stats.role_type = 'Pitcher'
. Diese Checkbeschränkungen garantieren, dass Batting_Stats immer einen Batter beschreibt, und notieren Sie einen Pitcher. Gleiches gilt für Pitching_Stats.
Sie haben bereits Ihre Lösung. Verwenden Sie drei Tabellen, wie in Ihrer Frage beschrieben, mit den von Steven A. Lowe beschriebenen Schlüsseln. Möglicherweise haben Sie weitere Probleme mit der Normalisierung innerhalb Ihrer Statistiktabellen, aber Sie haben die Beziehung zwischen Spielern und Statistiken korrekt modelliert. –
@Steven, ich stimme zu, dass Pitcher Fledermaus (in den NL und in Interleague spielen), aber das ist für ein Fantasy-Baseball-Draft-Tool und Pitchers Stats zählen nicht. –