All this is super easy with CouchDB. There is no fixed structure and you use map/reduce to search through the database. Far less complicated than 'user1', 'user2', etc because there's no way you can have an infinite number of such fields and having a program deal with constantly changing table structure seems excessively problematic.I personally think that the easiest way to solve the original problem would be to allow "user columns." My approach would be to have a table with all of the 'standard' columns (genus, species, etc) and then if the user needs extra fields for other data, just tack on another column (possibly named like 'user1', 'user2', 'user3', etc) and store what those columns represent in another table.
Yes and no. It is like OOP, but if I actually made all these things happen in the code rather than in the db, I would (yet again) be hardcoding structure.However, what you're describing here is exactly what OOP is all about! To use your example, a tree, you could have a tree class w/ properties for all of the 'standard' properties that you could want. Then you could just serialize the data for each class instance and store that in a db row. Although I'm not exactly sure on how to be able to extend the class, it probably wouldn't be too hard (depending on the language).
It looks like you're new here. If you want to get involved, click one of these buttons!