It sounds to me like you should be thinking in terms of sets for teams and matches:
- teams are sets of players (with 1 to 2 players based on your description)
- a match is a set of teams where each team fights the others in the set.
Since matches are sets and teams are sets, you could represent things like this:
{{P1}, {P2}} => P1 vs P2
{{P1, P2}, {P3, P4}} => P1+P2 vs P3+P4
{{P1}, {P2}, {P3}} => P1 vs P2 vs P3
This is all modeled with 1 to N relationships in a database.
Here is a database example for P1+P2 vs P3 vs P4 (ie. {{P1, P2}, {P3}, {P4}})
**Player**
+--------+
|PlayerID|
+--------+
|P1 |
|P2 |
|P3 |
|P4 |
+--------+
**Team**
+--------+
|TeamID |
+--------+
|Team1 |
|Team2 |
|Team3 |
+--------+
**Team Players**
+------+--------+
|TeamID|PlayerID|
+------+--------+
|Team1 |P1 |
|Team1 |P2 |
|Team2 |P3 |
|Team3 |P4 |
+------+--------+
**Match**
+--------+
|MatchID |
+--------+
|Match1 |
+--------+
**Match Teams**
+-------+--------+
|MatchID|TeamID |
+-------+--------+
|Match1 |Team1 |
|Match1 |Team2 |
|Match1 |Team3 |
+-------+--------+