Enforcing minimum cardinality in One To many design? If we have the following One to Many database design.

Team

+------+-----------+
| t_id | team_name | 
+------+-----------+
| 100  |  germany  |
+------+-----------+



FootballPlayers

+--------+------+-------------+--------+
|  p_id  | t_id | player_name | number |
+--------+------+-------------+--------+
|    1   |  100 |   T Muller  |   11   |
|    2   |  100 |   T Peters  |   8    |
|    1   |  100 |    Messi    |   2    |
|    1   |  100 |   J Cole    |   10   |
+--------+------+-------------+--------+


If a Team must have a minimum of 11 FootballPlayers, how can we enforce this within the database design?

Could I use Triggers? Perhaps One To Many is wrong? ...
Declare a constraint on Players, something like

check (10 &lt; (select count(*) from p_id where t_id = @t_id))

and ensure that your application inserts at least 11 players the first time.  

It's not clear this is a good idea, though.  It's one thing to say every player belongs to a team.  It's something else to say all teams have 11 players.  In the first case, you're enforcing referential integrity: what would teamless player be?  (Well, you might have worked with him.  I have.)  In the second case, you're imposing a business rule: does a team cease to exist if player #11 quits?  Is it the case that when player #11 quits, the whole team must be deleted?  

There might be such a rule, but it seems more likely (from this distance) that the team continues to exist but becomes ineligible to play.  In that case you might want a view 

create view EligibleTeams as 
select * from Teams as t where 10 &lt; 
    (select count (t_id) from Players where t_id = t.t_id)


Also, is it clear you need t_id and p_id?  Not to me.  I think your keys are the names of the players and the teams.  Definitely you don't want two Ravens or whatever, and the odds that you'll have two players named Roger Staubach on one team are longer than the Cowboys winning the World Series.