Well I think you are missing some key information in you database. Do you need to keep the formations from previous weeks? Can the players change as well as their positions? Could players be on more than 1 team? Could they be on different teams on different weeks? Are you going to be tracking stats on the players or only the position they played in a week for a given team?
Without knowing any of the above I'd build your database like so:
players
-------
player_id int
player_name varchar(50)
teams
-----
team_id int
coach varchar(50)
password varchar(20)
positions
---------
position_id int
position_name varchar(50)
These tables will give you a place to store all of your players, all of your teams, and a list of valid positions. These are your basic data pieces that will be needed to store your variable information about what position a player is playing on a given week for a given team.
formations
----------
formation_id int
team_id int
week_id int
player_postions
----------------
pp_id int
player_id int
position_id int
formation_id int
These tables are where the work is done, each team will have a formation for a given week, that's what the formations table holds just an id mapping a team to a week and a formation. The player_positions table is what holds your main set of data. Here you have a player assigned to a valid position for a given team in a given week. You only have to maintain what position the player is in for that formation, the formation maintains what week and team that happens to be for.
I hope this helps, but I think you need to ask yourself some more questions before you start trying to design this.