Design a betting system for Fifa World Cup Russia 2018
I recommend that you work through the bets as follows:

First, determine what data you need to have for each type of bet. Then, look at what's common to all bets, and what only applies to some. Where possible, see if some things that appear different can be turned into something common. Last, look at where you connect to other tables, and figure out how to do that most effectively.

For example (I may get some of this wrong; not sure of how the World Cup matches all fit together):

All bets would involve:


a person making the bet
a winning team
a match of some sort (can you tell based on rounds, etc. what match would determine a group winner in advance, and what match will be the final match?)


Some bets involve:


Winning team's goals
Losing team's goals
120 minute match or not


So I would try to build a bet table that would allow for any type of bet. If score is irrelevant for some bets, ignore it. Treat the "penalty" bets as if they are separate from the regular bets (assuming the "penalty" bet is scored independently of the regular bet's score; if there's one score, then you have to keep them together).

Since ultimately each bet will be determined by a single match (again, assuming I'm following correctly, and that winning isn't a "best two out of three" or something), I'd tie each bet to its user and to the specific match that will determine it. If the "two out of three" situation is true, try to define a "match" such that it covers either a specific game, or a series of games; or, define two different things a bet can tie to, a match or a series (or some such). If you can have "match" and "series" bets, it might make sense for them to be in separate tables (especially if all series bets have certain different options than all match bets); still, you'd want to keep the tables as similar as possible, as you're likely to want to pull some information through both tables. Do try to minimize the this sort of table split; it does complicate calculations, even if it keeps the overall DB design cleaner.

Your actual solution will be different, I'm sure, but this should help point you to the basic principles you can use.