[ZODB-Dev] Re: so your coming from the rdbms world tutorial?

Gary Poster gary at zope.com
Fri Mar 21 20:41:00 EDT 2008


On Mar 20, 2008, at 11:04 PM, Sean Allen wrote:
>
> I've been playing with this and I'm still having a disconnect 3 week  
> later.
>
> 1. I love the zc.relation stuff it answers one area of stuff I  
> hadn't even gotten to yet.

cool :-)

> 2. I'm just totally missing something

less cool. :-/

> If I have Customers and Orders and I want to be able update all of  
> them independently of their relationships ( so that if an order is  
> updated, when i get the customer at some later time, it has the  
> updated order amongst that relation ) but I can't figure it out. I  
> tried looking at the zope.app.folder stuff but I keep getting lost  
> in the zope aspects of it and am having a hard time seeing the  
> forest for the trees.
>
> Is there some more general ready on the patterns used that you know  
> of? I think if I understood the idea more in an abstract sense, I  
> could get a lot more out of the folder implementation.

Here's a simple, dumb example that parallels the folder stuff.  See  
the Dict class in http://svn.zope.org/zc.async/branches/dev/src/zc/async/utils.py?rev=84657&view=auto 
  .  You put something in the dict, and __setitem__ slams a name and a  
parent.  The other mutating methods should do the right thing as well  
in terms of updating the back reference.  So, completely randomly and  
arbitrarily, but to try and make a parallel, what if customers were a  
dict of orders, and when you made an order it was associated with only  
one customer, and you put the order "in" the customer.  This may be  
bizarre--what's the key?  can more than one customer be associated  
with an order?  But that would mean that customer.values() would get  
all of the customer's orders, and order.parent would be the associated  
customer.

This example subclasses zc.dict, a super simple package that only  
depends on ZODB, btw.  It does not have full dict behavior, as Jim  
likes to point out, because items are stored by BTree sorting, not  
hashes, but it looks like a dict otherwise.  Maybe it can help you  
out.  If you want to try out this example, copy the code out and get  
the zc.dict egg and give it a try.

Anyway, this pattern of directly manipulating back-references is good  
for intrinsic relationships like customers and orders.

Hope that helps a bit,

Gary


More information about the ZODB-Dev mailing list