Topic: Designing admin interfaces and workflows for complex data structures
I'm trying to find easy to use ways for entering data where each object may contain several levels of nested objects...
As an example let's take a moderately complex application for managing collections of movies for instance. Let's presume further that the data modeling and relationships have already been sorted out and that everything was designed to maintain a proper level of separation and normalization in the database.
In such a case the user's collection may for instance contain a number of DVDs. Each DVD would have a number of properties and may also have a number of movies, featurettes etc. attached to it. The movies in turn have some different properties and a number of actors attached. The actors again may have photos etc... And this may continue for an arbitrary levels of depth and complexity.
When entering data a typical use case might be:
- The user want to add a new DVD to his collection.
- If that DVD already exists in the database it will simply be added to the user's collection
- If it does not exists yet. A new DVD record is created.
- The user then enters some of the DVDs details.
- Once done, the user will define one or more movies contained on that DVD.
- Again, if the movie is already in the database it is simply linked to the DVD.
- If not the user may wish to immediately enter some of the movies details.
- While editing the movie, the user may need to add some actors to it.
- And again, if a particular actor is not yet in the database a new one need to be created...
As can be seen the main problem is that while editing any particular model the user may need to "go one level deeper" to enter data for a child model, and when done he will need to be able to return to editing the parent (e.g. continue adding new actors to the movie). And this may happen recursively.
I've been struggling with finding a good and easy to use and easy to understand workflow and/or interface model for dealing with this...
Did any of you encounter similar problems before?
What would you suggest as the best solution?