In the interest of actually answering your question, and not just commenting on it, here are some additional thoughts.
From your description this is how your tables look:
Personally, I try to use natural keys as much as I can, but I can see in this case the Games
table would end up with a composite key of home_team_id
, away_team_id
, venue_id
and an additional game_date
to make sure a game row is unique.
This would then have the knock-on effect of needing a silly number of foreign keys in the Stats
table; so stick with a surrogate key.
Using a surrogate game_id
means it's possible to create duplicate games, so add a unique index on the home_team_id
, away_team_id
, venue_id
& (additional field) game_date
. Then you have simpler design but still protecting against duplicates.
As I said in my comment, if you envisage adding many more stats, or adding them frequently, it would be better to make them row data to avoid updating the model too often and having to rewrite your queries. If you get to that situation, post another question :)