Imagine a system that works with data, which structure changes over time. Say, for example, today your User object contains Name : String and Email : String, but tomorrow you need to add Age : Integer and Address which consists of Country, Zip code, etc. Then you may want to create new field User.Contacts and move Email and Address to that field, like refactoring. And it should be done in runtime, without coding and redeployment, because it will be done by customers or administrators, not developers.
What approaches and tools would you consider for storing such data? Will it be separate table for each class of objects and altering table each time structure is changed, or 1-to-many relationship between object and it's property values (like table StringProperties with fields ObjectID, PropertyID, StringValue); or one big table for all objects (with generic fields StringField1, NumericField2, etc)
How would you make indexing work?
Would you consider using less mainstream tools like CouchDB? Are there any other tools I should know about?
Are there any existing examples of application with similar idea - allowing users to define and augment their own data structures?
EDIT: I do not expect anyone to solve my entire design problem. Rough ideas or links to tools like CouchDB or Prevayler are more than welcome. Any article links are welcome too.