manaI never took any database classes, however, it seems like your diagram is tough to understand because I'm not sure what each term is referring to. Items? Classes? Rankings? Statistics? A lot of this design hinges on how the league itself is designed (for example, you're only supporting seasons, when ETF2L does occasionally do one night cups and other tournaments).
It'd be way easier to design around a league already in mind, rather than the other way around. i.e. the only reason I'd continue on this project is if someone is in need of a database for a league, and they had a reasonable plan, and some kind of accredited background (because who wants to just waste time).
It's also a slippery slope to say that the KA/D ratio can determine the individual skill of a player. It's much better to associate the match with a logs.tf or SizzlingStats log to see the overall picture.
In short, is there any reason you want to build this database? For fun? Because that's a very complicated road to go down if you actually want to accomplish your goal.
I'm building the database in order to learn these techniques better and build a "programmer's portfolio" before seeking jobs in the field. It's also my way of contributing back to the community. If anything ever comes out of this, it will be released open-source on GitHub. But first and foremost, it's a personal project meant to help me develop some practical skills.
The database itself will later be used for a machine learning application which will try to model the dynamics of a TF2 competition and try to predict the outcome of a future season. I chose to focus on ETF2L because it seemed easier to find logs for matches in the prem division. Not to say that I'm not interested in ETF2L cups, but I guess these would be modeled in a similar way to an ordinary league. Is there any important difference between
I haven't started designing that bit yet, however I'm going to have to rely on some sort of "performance metrics" such as KA/D for this (just as an example). Think of the players ratings from a Fifa game. Correct me if I'm wrong, but I think you can't tell a program to "look at a log file and see the big picture", that would need artificial intelligence far beyond what I am now able to code. Instead, I think I will have to rely on individual player statistics. Let me know if you have any comments about this. What would be a good metric for the quality of play in TF2?.
mansfield7A division doesn't have a ranking, it has teams. A ranking is displaying teams based on their match results, it's not an entity by itself.
You'd also want an intersection table for player and team, since even if a player is only going to be on one active team at a time you'd want to keep a history, and account for teams going inactive, etc.
I think this is a scenario where you really need fully defined requirements as to what a league is going to be before you start worrying about how to store the data.
Thanks for the comments. You're definitely right about the need to have well defined requirements. In my first post on the thread I added a first version of these, based on my current understanding of how a TF2 competition works. I'm not sure if I got everything right, so any corrections/additions would be very helpful.
Good catch on the intersection table between Players and Teams. Perhaps I need a similar junction table between Teams and Matches as well? And if I add a relationship between Divisions and Teams, then I guess the one between Divisions and Matches becomes redundant. I'm not too good at this whole database normalization thing yet. Here's an updated entity-relationship diagram, I hope I understood your comments well. I'm still not sure what to do about the division table/rankings. Is this an association with derived fields? Or does this only appear in the visual reports generated from the application?