그래서 제가 여기서보고있는 것은 이닝이 간접적 인 것을 제외하고는 실제로 게임의 속성이 아니기 때문에 약간 모순입니다. 하지만 어쩌면 그저 나일뿐입니다. 개인적으로 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에 대해 세분화하여 실제로 추적하고 있기 때문입니다. 게임 테이블에서 이닝을 비정규 화하는 방법을 보여주고 싶었습니다. 나는 내 모델을 그처럼 흐르도록 조정할 것입니다. 이것이 나의 프로젝트였습니다. HTH. YMMV.
또한 나는 TSQL 사람이지만 아래에 표시된 개념은 내 개념을 설명하는 데 매우 효과적이라고 생각합니다. 언어 의미론이 정렬되지 않을 수 있습니다.