Imaginez un système qui fonctionne avec des données, structure qui évolue avec le temps. Dites, par exemple, aujourd'hui votre objet utilisateur contient Name: String et Email: String, mais demain vous devez ajouter Age: Integer et Address qui se compose de Country, Code postal, etc. Ensuite, vous pouvez créer un nouveau champ User.Contacts et déplacez le courrier électronique et l'adresse vers ce champ, comme le refactoring. Et cela devrait être fait pendant l'exécution, sans codage et redéploiement, car cela sera fait par les clients ou les administrateurs, pas par les développeurs. Quelles approches et quels outils envisageriez-vous pour stocker ces données? Sera-t-il une table distincte pour chaque classe d'objets et table changeante chaque fois que la structure est modifiée, ou une relation un-à-plusieurs entre l'objet et ses valeurs de propriété (comme la table StringProperties avec les champs ObjectID, PropertyID, StringValue); ou une grande table pour tous les objets (avec les champs génériques StringField1, NumericField2, etc)Utiliser les données avec une structure variable
Comment feriez-vous fonctionner l'indexation? Envisagez-vous d'utiliser des outils moins courants comme CouchDB? Y a-t-il d'autres outils que je devrais connaître?
Existe-t-il des exemples d'application ayant une idée similaire - permettant aux utilisateurs de définir et d'augmenter leurs propres structures de données?
EDIT: Je ne m'attends pas à ce que quelqu'un résout tout mon problème de conception. Des idées approximatives ou des liens vers des outils comme CouchDB ou Prevayler sont plus que bienvenus. Tous les liens d'article sont les bienvenus aussi.
Je considère hachage et listes pour stocker des données dans l'exécution à coup sûr, mais il doit être persisté de toute façon. –
Prevayler a l'air intéressant, merci. –