To, co tu widzę, jest trochę sprzeczne, ponieważ inningi nie są tak naprawdę bezpośrednim atrybutem gier, z wyjątkiem pośrednich. Ale może to tylko ja. Osobiście zasugerowałbym coś bardziej jak tabelę RunsScored i chciałbym połączyć ją z powrotem z tabelą GamesHeader, więc zastanów się:
CREATE TABLE GamesHeader (
GameID INT IDENTITY(1,1),
HomeTeamID INT, --FK to teams table, naturally
AwayTeamID INT, --FK to teams table, naturally
FinalInningsCount BYTE, -- for faster reporting after the game is over
FinalHomeScore BYTE, -- for faster reporting after the game is over
FinalAwayScore BYTE, -- for faster reporting after the game is over
--Other attribs
)
CREATE TABLE RunsScored (
RunsScoredID BIGINT IDENTITY(1,1), -- for faster reverse traversal, possibly. May not be needed, this depends on your setup, as the normalization will show a composite key anyways
PlayerID INT, --FK to players table naturally
GameID INT, --FK to GamesHeader table naturally
Inning BYTE, --wait for the payoff
RunsEarned, --because you may want to track this by the player ... really the problem is that there's not a single naturalized setup for this, so you may be intersecting this table to another stats table elsewhere. idk, it depends on your model. I'm going for fairly simplistic atm. Wanted to demonstrate something else entirely, but this needs to be accounted for.
-- other attribs
)
SELECT MAX(r.Inning) FROM RunsScored r JOIN GamesHeader g ON g.GameID = r.GameID WHERE GameID = 'x'
To da ci maksymalną liczbę zmian rozgrywanych w konkretnej grze, a ponadto możesz udoskonalić według PlayerID -> TeamID, aby dowiedzieć się więcej szczegółów, jeśli chcesz. Co to może być, nie jestem pewien.
Prawdopodobnie poprawiłbym ten drugi stół tak, aby nie był RunsScored, ale coś o AtBat, ponieważ tak naprawdę to śledzisz. Chciałem tylko pokazać, w jaki sposób możesz zdenormalizować zmianę od stołu. Poprawiłbym mój model, aby płynął w ten sposób, gdyby to był mój projekt. HTH. YMMV.
Zauważ też, że jestem facetem TSQL, ale myślę, że przedstawione poniżej koncepcje działają całkiem dobrze w wyjaśnianiu mojej koncepcji. Semantyka językowa prawdopodobnie się nie pojawi.