Momenteel ben ik al even (paar dagen dus) aan het hoofdbreken over een datamodel voor mutatiebeheer. Wat bedoel ik met mutatiebeheer:
Er is een boom structuur van 6 parent-child (1:n) relaties. Via een applicaties zijn er twee soorten mutaties in te voeren: een is een mutatie op velden in een object. twee is een mutatie op een parent-child relatie (child aan andere parent koppelen). Normaal is dit geen probleem, maar de moeilijkheid waar ik tegenaanloop is het feit dat er over deze mutaties versiebeheer moet lopen. Een mutatie moet ingevoerd worden en kan (door een andere gebruiker) goedgekeurd danwel afgekeurd worden.
Al dit soort mutaties worden aan een releasemoment gekoppeld en op het moment van release worden alle goedgekeurde mutaties doorgevoerd om de nieuwe, bijgewerkte boomstructuur te exporteren naar externe systemen.
De mogelijkheden voor objectmutatie bestaan uit: een of meerdere velden moeten gewijzigd kunnen worden. Een object moet verwijderd kunnen worden (mits er geen children aanhangen), object moet ingevoerd kunnen worden.
De mogelijkheden voor relatiemutatie bestaan uit: relatie loskoppelen van parent, relatie verleggen naar andere parent.
Al deze bewerkingen moeten dus via een te accepteren of af te wijzen mutatie doorgevoerd worden.
Ik krijg het niet voor elkaar om een goed datamodel te verzinnen dat alle eisen omvat. De pogingen lopen uiteen van minder dan 10 tot bijna 30 entiteiten, maar bij alle varianten loop ik tegen problemen aan.
Datamodel poging 1:

parent, child: beginsituatie van entiteiten
parent_mutation, child_mutation: wijziging op velden van entiteiten
parent_child: geeft 1:n relatie aan. parent_id NULL is geen gekoppelde parent, mutation_id NULL is beginsituatie relatie. Bij mutatie_id != NULL is het een gewijzigde relatie
mutation: mutatieaanvraag gekoppeld aan release entiteit, kan goedgekeurd of afgekeurd worden
release: releasemoment entiteit.
Nadeel: Vrij complex, gezien er 5 van deze structuren in het uiteindelijke datamodel moeten. Veel controlelogica nodig om systeem consistent te houden.
Datamodel poging 2:

parent, child: begin en mutatiestand van entiteiten. Zelfreferentie is NULL bij origineel, verwijzing van mutatie naar origineel. Aangezien er twee typen mutaties zijn (veldmutaties en relatiemutatie), moeten deze uit elkaar gehouden worden door een vlag. Bij veldmutaties is de parent_id leeg, bij relatiemutaties zijn de velden leeg;
mutation: idem bij model 1
release: idem bij model 1
Voordeel: eenvoudig datamodel
Nadeel: redelijk wat niet gebruikte velden. Ook compexe logica nodig om systeem te controlleren.
Vraagstelling:
Ik hoop dat mijn probleem duidelijk is, maar ik heb ergens een gevoel dat ik in een verkeerde hoek loop te zoeken. Hebben andere mensen wellicht inzichten in deze problematiek?
Er is een boom structuur van 6 parent-child (1:n) relaties. Via een applicaties zijn er twee soorten mutaties in te voeren: een is een mutatie op velden in een object. twee is een mutatie op een parent-child relatie (child aan andere parent koppelen). Normaal is dit geen probleem, maar de moeilijkheid waar ik tegenaanloop is het feit dat er over deze mutaties versiebeheer moet lopen. Een mutatie moet ingevoerd worden en kan (door een andere gebruiker) goedgekeurd danwel afgekeurd worden.
Al dit soort mutaties worden aan een releasemoment gekoppeld en op het moment van release worden alle goedgekeurde mutaties doorgevoerd om de nieuwe, bijgewerkte boomstructuur te exporteren naar externe systemen.
De mogelijkheden voor objectmutatie bestaan uit: een of meerdere velden moeten gewijzigd kunnen worden. Een object moet verwijderd kunnen worden (mits er geen children aanhangen), object moet ingevoerd kunnen worden.
De mogelijkheden voor relatiemutatie bestaan uit: relatie loskoppelen van parent, relatie verleggen naar andere parent.
Al deze bewerkingen moeten dus via een te accepteren of af te wijzen mutatie doorgevoerd worden.
Ik krijg het niet voor elkaar om een goed datamodel te verzinnen dat alle eisen omvat. De pogingen lopen uiteen van minder dan 10 tot bijna 30 entiteiten, maar bij alle varianten loop ik tegen problemen aan.
Datamodel poging 1:

parent, child: beginsituatie van entiteiten
parent_mutation, child_mutation: wijziging op velden van entiteiten
parent_child: geeft 1:n relatie aan. parent_id NULL is geen gekoppelde parent, mutation_id NULL is beginsituatie relatie. Bij mutatie_id != NULL is het een gewijzigde relatie
mutation: mutatieaanvraag gekoppeld aan release entiteit, kan goedgekeurd of afgekeurd worden
release: releasemoment entiteit.
Nadeel: Vrij complex, gezien er 5 van deze structuren in het uiteindelijke datamodel moeten. Veel controlelogica nodig om systeem consistent te houden.
Datamodel poging 2:

parent, child: begin en mutatiestand van entiteiten. Zelfreferentie is NULL bij origineel, verwijzing van mutatie naar origineel. Aangezien er twee typen mutaties zijn (veldmutaties en relatiemutatie), moeten deze uit elkaar gehouden worden door een vlag. Bij veldmutaties is de parent_id leeg, bij relatiemutaties zijn de velden leeg;
mutation: idem bij model 1
release: idem bij model 1
Voordeel: eenvoudig datamodel
Nadeel: redelijk wat niet gebruikte velden. Ook compexe logica nodig om systeem te controlleren.
edit:
Ik was nog niet klaar, drukte op verkeerde knopje...
Ik was nog niet klaar, drukte op verkeerde knopje...
Vraagstelling:
Ik hoop dat mijn probleem duidelijk is, maar ik heb ergens een gevoel dat ik in een verkeerde hoek loop te zoeken. Hebben andere mensen wellicht inzichten in deze problematiek?
[ Voor 7% gewijzigd door DaCoTa op 17-02-2005 13:04 ]