Usually a root object container is required that contains all of the collection objects at the root of the object hierarchy. Typically, access is required to root object so that object references can be created or returned, because a relationship exists between two objects. It would be ideal if the root object (which contains all of the collection objects) can be accessed from any object that is utilising the library (i.e. inheriting from DatabaseObject or DatabaseObjects). This would avoid having to pass around the root object in each constructor or having to workaround the issue by creating new instances of collections (instead of managing one collection instance contained in the root object).
Thoughts so far: