イニングは間接的な場合を除き、ゲームの属性ではないため、ここで見ているのは少し矛盾しています。しかし、それは私だけかもしれません。私は個人的にRunsScoredテーブルのようなものを提案し、それを何らかの種類のGamesHeaderテーブルにリンクさせます。
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'
これにより、特定のゲームでプレイされた最大のイニングが得られ、PlayerID-> TeamIDでさらに絞り込んで、必要に応じて詳細を把握できます。それらが何であるかは分かりません。
RunsScoredではなく、AtBatについての何かになるように実際に2番目のテーブルを調整します。ゲームテーブルからイニングを非正規化する方法を示したかっただけです。これが私のプロジェクトである場合、モデルがそのように流れるように調整します。HTH。YMMV。
また、私はTSQLの男ですが、以下に示す概念は私の概念を説明するのに非常にうまく機能すると思います。言語セマンティクスはおそらく並ばないでしょう。