We want to record certain kinds of relations between games, like being in the same series. It's not ideal to just throw them all in a group with no ordering: we'd rather track that GameB is a sequel to GameA. My proposal is mostly for how to implement this technically, but I think it will be of interest to everyone.
I propose to create a new data item (a data list, I suppose, in our terminology): GameGameRelationType. The entities of this type will be the kinds of relationships that games can have to one another, like being a sequel, or being a clone. These relations will be directional: if we read one 'forward' it means (for example) "GameB is a sequel to GameA", while the 'backward' version of that same relationship is "GameA is a prequel to GameB". Or perhaps better terminology would be 'successor'/'predecessor', to be technically accurate.
A few proposed relations, as examples:
This kind of format could very easily be used for other relation types, like relations between people ("is the son/daughter of") or companies ("is a division of").
This proposal is primarily about the technical aspect of this, so my example relations may need tweaking, and of course many more might be added (spinoffs, enhanced remakes, parodies, companion games [like Pokemon Red and Blue], etc.). I certainly don't intend this to be the complete specification for how such a feature might be used. I'm most interested in feedback on the concept.
I propose to create a new data item (a data list, I suppose, in our terminology): GameGameRelationType. The entities of this type will be the kinds of relationships that games can have to one another, like being a sequel, or being a clone. These relations will be directional: if we read one 'forward' it means (for example) "GameB is a sequel to GameA", while the 'backward' version of that same relationship is "GameA is a prequel to GameB". Or perhaps better terminology would be 'successor'/'predecessor', to be technically accurate.
A few proposed relations, as examples:
Code: Select all
To implement this, we create a junction table in the database called (for example) GameGameRelations. It could have layout like this:IS_A_SEQUEL
Forward: GameA is a sequel to GameB
Backward: GameB is a prequel to GameA
HAS_CHARACTERS_FROM
Forward: GameA has characters from GameB
Backward: GameB's characters are in GameA
IS_A_CLONE_OF
Forward: GameA is a clone of GameB
Backward: GameB is cloned by GameA
Code: Select all
Then, we simply add a column to the Game table which links to rows of the GameGameRelations table. A game will link to every relation it's a part of. This prevents us from needing to add as many new columns to the Game table as there are types of relations between games, and would let us readily do fun things like get a list of every game that is a sequel to another game, or whatever.GameA RelationType GameB
Super Mario Bros. 2 IS_A_SEQUEL_TO Super Mario Bros.
Super Mario Bros. 3 IS_A_SEQUEL_TO Super Mario Bros. 2
Yoshi's Island IS_A_SEQUEL_TO Super Mario World
Mario Party HAS_CHARACTERS_FROM Super Mario Bros.
Mario Party HAS_CHARACTERS_FROM Donkey Kong
Mario Party 2 IS_A_SEQUEL_TO Mario Party
This kind of format could very easily be used for other relation types, like relations between people ("is the son/daughter of") or companies ("is a division of").
This proposal is primarily about the technical aspect of this, so my example relations may need tweaking, and of course many more might be added (spinoffs, enhanced remakes, parodies, companion games [like Pokemon Red and Blue], etc.). I certainly don't intend this to be the complete specification for how such a feature might be used. I'm most interested in feedback on the concept.