I have a use case that is similar to this (the real use case is more complicated and not about chess):
1 Lets say I have a folders content type, lets call it:
2 Inside Chessplayer I have content types of
3 In Chess Game schema I have a relation to the 'ChessPlayer' (the opponent )
4 Now, If the other ChessPlayer does not exist, I need to add it before making the relation
5 I would prefer a behavior where I could suggest the Player name (Autocomplete widget maybe), but if I write a name that does not exist, the opponent (ChessPlayer content type) was 'automagically' added.
We have this in Plomino with a relation field with datagrid widget and the add feature enabled.
IMO once you start getting into reusing a CMS as a DB then you get into more and more issues where a web content publishing model is too opinionated and you need something designed for data. Plomino is better at modelling these kind of relationships I think. You no longer have to deal with folder structures for a start.
I would create a dynamic vocabulary which calls and returns a list of chess players. On the schema definition you can define if new items are allowable, doing this in combination with an IObjectCreatedEvent would be my plan of attack for something like this.