On 01/06/2010, at 11:38 PM, Andrus Adamchik wrote:

> On May 31, 2010, at 9:11 AM, Andrus Adamchik wrote:
> 
>> BTW, semantically "vertical inheritance with discriminator" is essentially 
>> single-table inheritance with flattened attributes in subclasses. Which 
>> Cayenne supports already, but without any special optimizations for 
>> wide|deep hierarchies.
> 
> Pounding on this idea some more ... Since we can't get away from using entity 
> qualifier (discriminator) at least in some cases for performance reasons, and 
> I hate to add multiple strategies, maybe we do make the qualifier required 
> and treat vertical as a special case of single table with subclasses mapped 
> to the same root table, and having flattened attributes mapped to 
> subclass-specific table. The benefits of that are:
> 
> * No implicit inheritance relationship from super to sub table. It is 
> explicitly mapped inside flattened attributes.
> * More intuitive mapping, easier to visualize attributes, as all attributes 
> are rooted in the same base table.
> * Can potentially handle more than one joined table per subclass, or the same 
> join table for multiple subclasses, or a mix of single table mapping with 
> joined table mapping. I.e. in the spirit of Cayenne, we'd allow users to 
> follow a generic DB semantics in their mapping instead of forcing an 
> arbitrary ORM concepts on a (legacy) DB schema.
> * No new concepts for the backend or Modeler to deal with.

+1

> Now we still need to do some work with this design:
> 
> * Make sure SELECT/INSERT/DELETE/UPDATE work correctly with flattened 
> attributes over 1..1 relationships, and especially when inheritance is 
> involved.
> * Add convenience Modeler methods to flatten all attributes at once for a 
> given relationship to simplify subclass mapping.
> * Add performance optimizations per Mike's idea, limiting the number of joins 
> done in a single query.
> 
> Mike, do you see any holes in this design?

Looks good.

with regards,
--

Lachlan Deck

Reply via email to