Modelling a sport league

I am using a graph database for the first time for a project - I'm creating this for free for a non profit organisation but I am taking the opportunity to learn Neo4j and graph database modelling at the same time.

Basically a league system, with seasons and several division. In the end of the season top teams will advance up to a higher division and bottom teams will go to lower divisions.

This is my initial design and I have realize that this will unfortunately not work very well between seasons. I been trying to search for similar models to get inspiration but have not found any relevant yet. I got so many questions that I stumble on trying to get this right! Should I use intermediate nodes more or should I use edges to arrange the model? Looking maybe a few years down the line the model could be very cluttered.

So, any experienced modeler out there that have some good tips?


Ooh this sounds like a fun model to create! I haven't created a model for this problem exactly, but I did create one for the Men's and Women's World Cups.

The bit which I think might be relevant is the Squad nodes that are used to represent a Country in a specific World Cup. Perhaps something similar would work here, where instead of a Squad you'd have a Team in a particular season - I'm not sure what a good name for that would be?

It'd also probably help if you work backwards from the queries that you'd like to run against the graph. Do you have any idea of what those queries might be?

Hi Mark,

Thanks for your reply!
I have read the World Cup 2018 article before and that actually gave me some good ideas but I still struggle to found a nice way to organize my graph when it comes to future seasons, would it be a very bad practice to create a new node for a team for each season? Still having a main team node but each team would get a new node for each season..

I think that model is fine. I wonder what would determine the identity of the team e.g. imagine the seasons where Wimbledon became MK Dons. In one season they had one name, and then it changed for the next season, but they were conceptually still the same team!