Ugh, which mailing list should I send this to? I'm going to pick zope-dev since it's a fairly general list without too much traffic. Phillip J. Eby wrote:
Issues:
1. "Global relationship repository" has no use cases, and smells like trouble. Why not just explicitly store the Relationship() somewhere? After all, every RelationshipView will have a reference to it. (For ZODB4, a persistent module might be the natural place to put the "official" reference to the Relationship(); for ZODB3, just hang them off the root with suitably unique keys.)
One thing that perhaps wasn't made clear is that the repository doesn't directly contain relationships. It contains named relationship sets. I don't know if this is what you're talking about--correct me if I misunderstood.
2. There is no directionality to the associations; this doesn't work for hierarchies or graphs. E.g. think 'parent_child = Relationship()'. That won't work.
I have that concern also, although it was only a gut feeling until now. Elaborating on your example, an object may participate in multiple parent/child relationships, sometimes as a parent, sometimes as a child. With the current API, you can't distinguish between the parents and the children. That certainly won't work, and I'm sure it's only one example of needing directionality.
All in all, I don't see any reason to make this part of ZODB's API or add special repositories to support it. However, like PersistentDict or BTree, relationships might be a nice tool to have available in the ZODB library.
That is what is intended by the proposal. Jim suggested, in fact, that all this might be used independently of ZODB.
A final comment... Once this takes directionality into consideration, you might consider calling it an 'Association' rather than a 'Relationship', as it would then largely meet the MOF and UML semantics of an "Association". That is, an association is a collection of directed links between objects. It would then make sense to refer to refer to the 'RelationshipView' as an 'AssociationEnd'.
That is an excellent idea if we can determine that this project is distinct from the Zope 3 relationship service. It feels like the two projects are aiming to solve largely the same problem, but if they aren't, a name change will help clarify the difference. Shane