ดังนั้นสิ่งที่ฉันเห็นที่นี่เป็นสิ่งที่ขัดแย้งเล็กน้อยเพราะโอกาสไม่ได้เป็นคุณลักษณะของเกมโดยตรงยกเว้นทางอ้อม แต่นั่นอาจเป็นเพียงฉัน ฉันจะแนะนำบางอย่างเพิ่มเติมเช่นตาราง 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 แต่ฉันคิดว่าแนวคิดที่แสดงด้านล่างนี้ใช้งานได้ดีสำหรับอธิบายแนวคิดของฉัน ความหมายของภาษาอาจจะไม่ตรงกัน