Czy naprawdę nie należy używać więcej niż 3 stolików. Normalization zwykle oznacza rozbicie jednego nie znormalizowanego modelu na wiele znormalizowanych relacji.
Jeśli można mieć więcej niż 3 tabele, można rozważyć następujące (w 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, ...)
Atrybuty w []
zdefiniować klucz podstawowy, ale surrogate key może być używany, jeśli preferowane. Atrybut player_id
w Batters and Pitches powinien mieć wartość unique constraint, a także powinna być relacją Players (1). Batting_Stats i Pitching_Stats również powinny mieć klucz obcy odpowiednio do Batters i Pitching.
Należy jednak pamiętać, że powyższe nie oznacza, że gracz może być tylko pałkarziem lub tylko dzbankiem.
UPDATE:
Jedną z metod Jestem świadomy, aby wymusić, że gracz jest tylko ciasto lub tylko dzban, to przez ten model:
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, ...)
role_type
powinien zdefiniuj dzban lub ciasto. Batting_Stats i Pitching_Stats powinny mieć kompozytowy klucz obcy do Roles przy użyciu (role_id, role_type)
. Unikalne ograniczenie na Rule w player_id
zapewniłoby, że gracz może mieć tylko jedną i tylko jedną rolę. Na koniec dodaj check constraints, aby Batting_Stats.role_type = 'Batter'
i Pitching_Stats.role_type = 'Pitcher'
. Te ograniczenia sprawdzające gwarantują, że Batting_Stats zawsze opisuje pałkarz i notuje dzban. To samo dotyczy Pitching_Stats.
Już masz rozwiązanie. Użyj trzech tabel opisanych w twoim pytaniu, używając klawiszy opisanych przez Stevena A. Lowe'a poniżej. Możesz mieć dalsze problemy z normalizacją _inside_ tabel statystyk, ale poprawnie modelujesz relacje między graczami i statystykami. –
@Steven, Zgadzam się, że dzbany nietoperzy (w NL i interleague play), ale to jest dla narzędzia fantasy baseball projektu i statystyki batting miotaczy nie liczą. –