Ik heb volgend klasse diagram:

Zoals je kan zien kan een Project uiteindelijk andere Projects and Tasks bevatten, mooi volgens het composite pattern. Daarnaast kan een Task dependencies hebben die dan weer Projects, Tasks of Events zijn. Nu wil ik dit ook in Nhibernate mappen. Voor ik de code schrijf had ik graag geweten welke strategie ik het best toepas.
De table-per-class-hierarchy valt meteen af. De not-null beperkingen en de bloated tabel maken deze een no-go.
Table-per-subclass lijkt me 1 van de logische keuzes. Inheritance wordt wel vaker op deze manier uitgedrukt.
Ik hou dan wel een primary-key table over met 1-to-1 relations met de subclass tables.
Table-per-concrete-class lijkt me ook een mogelijke keuze, maar ik heb bedenkingen bij de <any> mapping die nodig is om zo'n class te refereren.
Als ik nu table-per-subclass kies, dan zie ik niet meteen hoe ik de primary keys moet managen. Zowel IDependency als ITask kunnen primary keys geven aan de subclasses, maar kan IDependency dan ook aan ITask keys geven? En gaat NHibernate dan ook goed om met de keys van de subclasses Task en Project?
Ook zijn er vormen die van impliciete mappings gebruik maken maar het is me niet duidelijk of ik dan in de Project klasse zowel een container voor Projects als voor Tasks moet bijhouden.

Zoals je kan zien kan een Project uiteindelijk andere Projects and Tasks bevatten, mooi volgens het composite pattern. Daarnaast kan een Task dependencies hebben die dan weer Projects, Tasks of Events zijn. Nu wil ik dit ook in Nhibernate mappen. Voor ik de code schrijf had ik graag geweten welke strategie ik het best toepas.
De table-per-class-hierarchy valt meteen af. De not-null beperkingen en de bloated tabel maken deze een no-go.
Table-per-subclass lijkt me 1 van de logische keuzes. Inheritance wordt wel vaker op deze manier uitgedrukt.
Ik hou dan wel een primary-key table over met 1-to-1 relations met de subclass tables.
Table-per-concrete-class lijkt me ook een mogelijke keuze, maar ik heb bedenkingen bij de <any> mapping die nodig is om zo'n class te refereren.
Als ik nu table-per-subclass kies, dan zie ik niet meteen hoe ik de primary keys moet managen. Zowel IDependency als ITask kunnen primary keys geven aan de subclasses, maar kan IDependency dan ook aan ITask keys geven? En gaat NHibernate dan ook goed om met de keys van de subclasses Task en Project?
Ook zijn er vormen die van impliciete mappings gebruik maken maar het is me niet duidelijk of ik dan in de Project klasse zowel een container voor Projects als voor Tasks moet bijhouden.
ASSUME makes an ASS out of U and ME