misha111Нет, при таком подходе (связка по intid) никаких подводных камней не будет, успешно так связывал объекты 2 года и никаких проблем не возникало. Преимущество в том, что вы будете оперировать прозрачными объектами (без вложенностей).
по id, прочитал. Он мне показал сложноватым, и ещё неизвестно какие подводные камни могут появится.
P. S.
Проблемы возникают как раз-таки при вложенностях. У меня был горький опыт со следующим:
Оьъект, у которого было свойство gallery:
...
gallery = Tuple(value_type = ImageField) # Тут ImageField - кастомное поле, которое наследовалось от Bytes
..
1. В ZODB попадает каждый Image.
2. В ZODB попадает Tuple
3. В ZODB попадает объект.
Видимо, в некоторых случаях (наблюдалось там, где больше 5 картинок) возникал конфликт при изменении очередности этих шагов, поэтому от такой практики пришлось отказаться.
В таких случаях большие объекты вообще лучше делать контейнерами (наследуясьот zope.app.container.btree.BTreeContainer или от zope.app.container.ordered.OrderedContainer), делая ему следующую схему:
class IObjectSchema:
attr1 = Type1()
...
attrN = TypeN()
class IObjectContainer(IOrderedContainer):
containers('path.Interface11', 'path.Interface12', ...)
contains('path.Interface1', 'path.Interface2', ...)
class IObject(IObjectSchema, IObjectContainer):
pass
Таким образом, можно очень много всякого связывать с данным объектов, вкладывая в него другие объекты как в контейнер