Is gebruik van verwerkingssoort "R" wel of niet toegestaan bij vervangen van een relatie bij een object waarvoor geen historie wordt bijgehouden. Voorbeeld: Binnen de LV WOZ houden we geen historie bij van NPS. Er is een relatie NPSTGO voor verblijftIn. Wanneer iemand verhuist moet de actuele relatie veranderd worden. Dat betekent (zonder historie) dat de bestaande relatie vervalt en dat de nieuwe relatie wordt geregistreerd. Het lijkt logisch om deze mutatie aan te leveren met verwerkingssoort "R" in de "was" en de "wordt". De vraag is of dit wel voldoet aan de StUF standaard is. Omdat er geen historie wordt bijgehouden is er geen tijdvakRelatie, geen tijdvakGeldigheid en geen tijdstipRegistratie. De StUF standaard stelt echter als eis bij verwerkingssoort "R" (zie tabel 5.5 op pagina 60) dat beginRelatie, eindRelatie, beginGeldigheid, eindGeldigheid en tijdstipRegistratie op een bepaalde manier gevuld moeten worden bij gebruik van verwerkingssoort "R". Nu deze attributen ontbreken, kan niet worden voldaan aan deze eis en ontstaat dus de vraag of verwerkingssoort "R" in combinatie met het niet bijhouden van historie wel is toegestaan.
wo, 16-10-2013 - 15.46u
#1
Vervanging relatie zonder bijhouden historie
Wanneer een object gewijzigd wordt in StUF wordt gebruik gemaakt van een 'W' als mutatiesoort en een 'W' in de verwerkingssoort. Als er nu gekeken wordt naar de NPS zonder tijdigheid waarin zich een relatie bevindt ook zonder tijdigheid, dan is het aanleveren van een mutatie die tijdigheid ten grondslag heeft niet logisch. Een wijziging kan worden doorgevoerd zonder dat hierbij tijdigheid speelt. Dit betekend in het veronderstelde geval dat er in de relatie (verblijftin) een verwerkingssoort 'I' staat aangezien deze na de wijziging nog steeds aanwezig is. De gerelateerde (TGO) krijgt dan een verwerkingssoort 'W' omdat hiervan in de was en de wordt de velden verschillen. De reden om een wijziging ('W') te willen naast de geldig oplossing die hier is beschreven, betreft het feit dat een verwerkingssoort 'R' bedoelt is om historie op te bouwen. En wanneer er dus wordt afgeweken van de standaard, moet er een extra operatie worden gedefinieerd in de software van zowel het verzendende systeem als het ontvangende systeem. Hierbij moet tevens nog worden rekening gehouden met het feit dat de NPS en zijn relaties als niet historisch moeten worden gezien in de generatie en de verwerking van de berichten. Mijn conclusie is dan ook dat het verbieden van het gebruik van een 'R' bij relaties zonder tijdigheid een zeer geldig verbod is en moet blijven.
Punt 6 op blz 58 doorlopend naar blz 59 in versie 16 van StUF0301 definieert de beëindiging van een relatie als: "Dit betekent dat de relatie niet langer in de werkelijkheid bestaat, bijvoorbeeld het niet langer hebben van een bepaalde verblijfstitel." Even verderop wordt gesteld: "Een relatie kan ook beëindigd worden voor relatie-entiteiten waarin de elementen en niet voorkomen." Voor het beëindigen van een relatie is het dus niet noodzakelijk dat de relatie een tijdvakRelatie bevat. Punt 7 op blz 61 definieert verwerkingssoort 'R' als: "Dit betekent dat de oorspronkelijke relatie wordt beëindigd en vervangen door de nieuwe relatie. Een voorbeeld hiervan is de verhuizing van een persoon van het ene adres naar het andere. Bij een vervanging wordt de oorspronkelijke relatie een historische relatie van het object van waaruit de relatie ligt." Een vervanging is de combinatie in één oud/nieuw paar van de beëindiging en het toevoegen van een relatie. Hier wordt niet opnieuw expliciet gesteld dat bij een beëindiging in een vervanging het tijdvakRelatie niet aanwezig hoeft te zijn. Dit geeft helaas aanleiding tot de onjuiste interpretatie van de standaard dat de beëindiging in een vervanging op een hele andere manier zou moeten worden afgehandeld dan een beëindiging op zich. De verwerkingssoort 'R' is in de standaard opgenomen om twee redenen: 1) Het is compacter om in geval van een vervanging in oud de te vervangen relatie op te nemen en in nieuw de toe te voegen relatie 2) Op deze manier kan expliciet worden afgedwongen dat het gaat om een vervanging waarbij eindRelatie in 'oud' gelijk moet zijn aan beginRelatie in 'nieuw'. Als de standaard verwerkingssoort 'R' niet zou bevatten, dan kan voor de veel voorkomende operatie van een vervanging van een relatie niet worden afgedwongen dat eindRelatie in de beëindiging gelijk is aan beginRelatie in de toevoeging. Helaas is het gelijk zijn van eindRelatie in 'oud' aan beginRelatie in 'nieuw' gespecificeerd zonder dat opnieuw is herhaald dat deze operatie net als een beëindiging ook is toegestaan als het tijdvakRelatie niet voorkomt in de relatie-entiteit. In tabel 5.5 en zijn legenda 5.6 wordt tijdvakRelatie in 'oud' op precies dezelfde wijze behandeld. Als in het ene geval tijdvakRelatie niet nodig is en in het andere verplicht, dan zou je verwachten dat hier ook een verschil zou zijn dat dit duidelijk maakt. Bij de werkwijze die Hans in zijn post voorstelt gaat door een verandering van de gegevens van een gerelateerde deze over in een andere gerelateerde met een andere sleutel in de database. Het ene TGO-object wordt per slot van rekening vervangen door een ander TGO-object. De enige operatie waarbij in StUF een sleutel mag worden gewijzigd is verwerkingssoort 'S' een sleutelwijziging en die is niet toegestaan in een gerelateerde. In een sleutelwijziging mogen overigens ook de overige gegevens niet wijzigen zoals hier wel nodig is. Al met al stel ik voor dat we door middel van een erratum bij punt 7 ook expliciet maken dat een vervanging mag worden doorgevoerd ook als op de relatie-entiteit het tijdvakRelatie ontbreekt.
In bovenstaande post is bij het pasten van de tekst vanuit notepad iets mis gegaan. Gebruik daarom onderstaande tekst. Punt 6 op blz 58 doorlopend naar blz 59 in versie 16 van StUF0301 definieert de beëindiging van een relatie als: "Dit betekent dat de relatie niet langer in de werkelijkheid bestaat, bijvoorbeeld het niet langer hebben van een bepaalde verblijfstitel." Even verderop wordt gesteld: "Een relatie kan ook beëindigd worden voor relatie-entiteiten waarin de elementen <StUF:beginRelatie> en <StUF:eindRelatie> niet voorkomen." Voor het beëindigen van een relatie is het dus niet noodzakelijk dat de relatie een tijdvakRelatie bevat. Punt 7 op blz 61 definieert verwerkingssoort 'R' als: "Dit betekent dat de oorspronkelijke relatie wordt beëindigd en vervangen door de nieuwe relatie. Een voorbeeld hiervan is de verhuizing van een persoon van het ene adres naar het andere. Bij een vervanging wordt de oorspronkelijke relatie een historische relatie van het object van waaruit de relatie ligt." Een vervanging is de combinatie in één oud/nieuw paar van de beëindiging en het toevoegen van een relatie. Hier wordt niet opnieuw expliciet gesteld dat bij een beëindiging in een vervanging het tijdvakRelatie niet aanwezig hoeft te zijn. Dit geeft helaas aanleiding tot de onjuiste interpretatie van de standaard dat de beëindiging in een vervanging op een hele andere manier zou moeten worden afgehandeld dan een beëindiging op zich. De verwerkingssoort 'R' is in de standaard opgenomen om twee redenen: 1) Het is compacter om in geval van een vervanging in oud de te vervangen relatie op te nemen en in nieuw de toe te voegen relatie 2) Op deze manier kan expliciet worden afgedwongen dat het gaat om een vervanging waarbij eindRelatie in 'oud' gelijk moet zijn aan beginRelatie in 'nieuw'. Als de standaard verwerkingssoort 'R' niet zou bevatten, dan kan voor de veel voorkomende operatie van een vervanging van een relatie niet worden afgedwongen dat eindRelatie in de beëindiging gelijk is aan beginRelatie in de toevoeging. Helaas is het gelijk zijn van eindRelatie in 'oud' aan beginRelatie in 'nieuw' gespecificeerd zonder dat opnieuw is herhaald dat deze operatie net als een beëindiging ook is toegestaan als het tijdvakRelatie niet voorkomt in de relatie-entiteit. In tabel 5.5 en zijn legenda 5.6 wordt tijdvakRelatie in 'oud' op precies dezelfde wijze behandeld. Als in het ene geval tijdvakRelatie niet nodig is en in het andere verplicht, dan zou je verwachten dat hier ook een verschil zou zijn dat dit duidelijk maakt. Bij de werkwijze die Hans in zijn post voorstelt gaat door een verandering van de gegevens van een gerelateerde deze over in een andere gerelateerde met een andere sleutel in de database. Het ene TGO-object wordt per slot van rekening vervangen door een ander TGO-object. De enige operatie waarbij in StUF een sleutel mag worden gewijzigd is verwerkingssoort 'S' een sleutelwijziging en die is niet toegestaan in een gerelateerde. In een sleutelwijziging mogen overigens ook de overige gegevens niet wijzigen zoals hier wel nodig is. Al met al stel ik voor dat we door middel van een erratum bij punt 7 ook expliciet maken dat een vervanging mag worden doorgevoerd ook als op de relatie-entiteit het tijdvakRelatie ontbreekt.
Dit Erratum is opgevoerd in de onderhoudsverzoeken als ERR304.
De lijst met onderhoudsverzoeken vind je op:
gemmaonline.nl/index.php/StUF-Expertgroep#Documenten
In de StUF Expertgroep van 15 januari 2014 heeft Maarten aangegeven dat hij in verband hiermee al een wijziging heeft doorgevoerd in de versie van StUF standaard die in die vergadering uitvoerig is besproken. De vergadering heeft tevens aangegeven geen bezwaar te hebben tegen het wijzigen van een relatie als tijdvakRelatie ontbreekt.
Dit erratum is doorgevoerd in patch 19 (28 maart 2014).
Als uiteindelijke oplossing hebben we aan punt 7 op blz 61 van de StUF standaard de zin
"Een relatie kan ook vervangen worden voor relatie-entiteiten waarin de elementen <StUF:beginRelatie> en <StUF:eindRelatie> niet voorkomen. Het verzendende systeem kan dan niet specificeren op welk moment de relatie vervangen is."
toegevoegd.
Discussie gesloten.