TukkerTweaker schreef op woensdag 13 april 2005 @ 10:06:
De
Hibernate documentatie over de te kiezen inheritance strategie laat mij een beetje in het duister tasten.
Het volgende is de sitatie.
Ik heb een super klasse Person en 2 subklassen Employer en Customer. 1 Person kan zowel Employer als Customer zijn maar ik wil de gegevens natuurlijk niet redundant opslaan. Welke strategie moet in hiervoor kiezen?
Voorwaarde is dat de klassen Person, Employer en Customer moet elk in een aparte tabel opgeslagen worden.
Die voorwaarde kan niet, want je wilt de data niet redundant opslaan. Je loopt nu tegen de discrepantie aan die bestaat tussen semantische inheritance in databases en type inheritance in code en verder verwar je entity en entity definitie.
In theorie kun je doen:
insert row P in person, insert row C in customer met FK naar P en insert row E in employee met FK naar P.
Echter, op dat moment sharen de entities C en E dezelfde data elements, nl. die in P. En dat kan niet, want een entity is een unieke verzameling data elements. Voor de types Customer en Employee maakt dit niet uit, echter voor de entities (de data!) wel.
Op dit moment gebruik ik joined-subclass maar daarmee voorkom ik niet de dubbele opslag van Person. Wat doe ik fout?
Wat je fout doet is voorwaarden stellen en dan de consequenties daarvan als oplosbaar probleem beschouwen met die restrictie dat de voorwaarden die als bron van de consequenties gelden als onaantastbaar te definieren. Dit houdt dus in dat het niet oplosbaar is.
Zodra je in je model tegenkomt dat een instance van subtype S1 van supertype Su semantisch ook van het type S2 kan zijn, is inheritance onmogelijk, tenminste in Java/.NET etc. want zoals je in deze zin ziet heb je multiple inheritance nodig: een SS1 type, dat erft van zowel employee als customer, want de entity die jij wilt creeeren moet beide typen hebben.
Doe dus zoals Alarmnummer zegt: creeer roles. En geloof me: de voorwaarden die jij stelt slaan echt nergens op: ze creeeren juist je probleem. Ze dan als absolute voorwaarde te positioneren zorg je er alleen maar voor dat een oplossing niet mogelijk is. Wie verzint zo'n model en die voorwaarden?