For this type of design a couple of alternatives are:
#1 - Composition Design
Follow the object composition pattern, i.e. an object has a, instead
of an object is a. So your base entity could maintain a type column
and then foreign key relationships to other tables, dependent upon
what type of entityit is.
#2 - Metadata Design
This pattern has a header table, with common object header
information, and a link to a table of name / value pairs which
represent the object attributes. This can be cut a number of ways.
You can have a table which defines object attribute types or meta
data, and then have an join table between the attribute type (meta
data) and object table, which contains the objects attribute value.
Both of these design's have pros and cons. Metadata Design's are very
flexible and can be remodelled at runtime, but they usuallly done
scale well and are difficult to write reports against. The
composition based design is pretty well the flip side of the Metadata
design.
regards Malcolm Edgar
On Thu, Jul 10, 2008 at 8:03 PM, ihawk ihawker <ihawkmail@gmail.com> wrote:
> Hello!
>
>
> I am trying to model a list of heterogeneous entities by having a
> ListItem table where the list item entity is able to point to an
> arbitrary entity (Person, Computer, URL, Movie, etc).
>
>
> I don't want to use single-table inheritance natively supported by
> Cayenne because of big database size overheads (the entities are
> drastically different from one another). In fact I don't necessarily
> want to use inheritance at all (PersonListItem, ComputerListItem,
> etc), but this seems to be the only option in Cayenne to model such a
> list.
>
>
> I've read Mike Kienenberger's article
> (http://cwiki.apache.org/CAY/compositeverticalinheritance.html) about
> simulation of vertical inheritance in Cayenne and found that it might
> be acceptable for my case.
>
> But I am having problems generating classes from the velocity template
>
> - Скрыть цитируемый текст -
> given in the article, although I've used code generator parameters
> recommended in article.
>
>
> It seems the parser fails to parse ${objEntity.getClientSuperClassName()},
>
> ${anObjEntity.getClientClassName()}, although other methods/attributes
> of "objEntity", "entityUtils", "stringUtils", "importUtils" are parsed
> correctly.
>
>
> I've tried with Cayenne 2.0.4, Cayenne 3.0M4.
>
>
> Thank you,
>
> Andrey Strib.
>
This archive was generated by hypermail 2.0.0 : Thu Jul 10 2008 - 06:53:14 EDT