May I suggest to use 3 tables:
Table1 ->user info
Table2 ->scheduled games
Table3 ->signups info; (GameID,UserID) <-tiny table here
Table4 ->if you need many schedules for the same game.
This way relatively fixed info(games) will not be duplicated.
Foreign key is just another name for the primary since both keys reside in different table they gave a different name.
Now Table3 has a foreign keys UserID and GameID of Table1, and Table2 respectively.
Now GameID is an increment as I assume.
To get the GameID when you create games is as follow. You will also create a new row for your game table(Table2).
INSERT INTO Table2 VALUES(GameID,....)
SELECT MAX(GameID) FROM Table2 + 1
Now if a user wants to join the Game.
Assume you know the UserID through login, and GameID through a variable catching the GameID on the game page(or the join button). Check if user already registered for the same game, then insert the user in Table3 if everything is cool.
SELECT * FROM table3 WHERE UserID<>UserID1 AND GameID<>GameID1;
INSERT INTO Table3 VALUES(GameID1,UserID1)
To find all user from a game:
SELECT * FROM Table2,Table3, WHERE Table2.GaneID=Table3.GameID AND Table3.GameID=GameID1
My strategy might screw up all your currect logic, but it was all my pleasure 😃