[Zope] Pointer-to-Object Properties

Toby Dickenson tdickenson@geminidataloggers.com
Tue, 2 Nov 1999 16:31:06 -0000


> -----Original Message-----
> From: Thomas B. Passin [mailto:tpassin@mitretek.org]
> Subject: Re: [Zope] Pointer-to-Object Properties
> 
> From: Toby Dickenson <tdickenson@geminidataloggers.com>
> 
> >> From: Michael Bernstein [mailto:mbernstein@profitscape.net]
> >
> >> It would be very beneficial to be able to 'point' to
> >> arbitrary objects as if they
> >> were sub objects, thus enabling one-to-many, many-to-one, and
> >> many-to-many
> >> relationships not constrained by the object heirarchy.
> >>
> >> Classic example: Many author objects, many book objects.
> >> Authors can have written
> >> several books, and certain books are collaborations with more
> >> than one author. It
> >> does not make sense for books to be contained within authors,
> >> or authors to be
> >> contained within books.
> >>
> >> While this simplistic scenario would allow us to either
> >> assign a list property
> >> with  book titles to an author object, or a list property
> >> containing authors names
> >> to a book object, and live with the small amount of
> >> duplicated data
> >
> >I think the key observation here is that the additional information
> >should be sufficient to identify the foreign object.... then the
> >pointed-to object can be located by searching a Catalog.
> >
> 
> Many-to-many relationships are always tricky.  As others have 
> pointed out in
> this thread, it is highly desirable to have some means to 
> maintain data and
> referential integrity.  In SQL this is done by declaring 
> create-delete-update
> rules for each foreign key relationship.
> 
> Also, you want to make keep the properties of the two types 
> of objects in the
> many-to-many separate, to minimize coupling.  In the case of 
> books, one way to
> do this is to have a book maintain a list of its authors, and 
> each author to
> maintain a list of its books.  Then a book and an author only 
> need to know about
> lists, not about authors and books.  You can delete a list 
> item without deleting
> its parent object.  But now, if a parent object is deleted, 
> how do you make sure
> all references to it in various lists are also deleted?  Not 
> so easy!  Back to
> data integrity again.

A small step up from this is to replace the second list (a list
of authors in a Book object) with a Catalog. The Book can determine all
of it's authors by searching the index of 'book-list' properties.

With this change you never break data integrity by changing the list,
although it is possible to break it by deleting a Book.