I agree with Thomas, the reverse relationships should be derived from the
forward relationships.  The RM doesn't necessarily need to be reflected in
the persistence model.

 

Having said that, we do have a fundamental issue regarding OBJECT_REF with
regard to using VERSIONED_OBJECT uid or VERSION uid, in some cases it is
desirable to use the former because you want the relationship to exits even
if the referenced object is revised, whilst in other case this may not be
safe practice.  I think this issue deserves some discussion and a Wiki page
for the outcome.

 

Heath 

 

From: [email protected]
[mailto:openehr-technical-bounces at openehr.org] On Behalf Of Thomas Beale
Sent: Thursday, 28 April 2011 11:49 PM
To: openehr-technical at openehr.org
Subject: Re: Reverse Relations

 


Hi Bert,

On 19/04/2011 11:54, Bert Verhees wrote: 

Hi,

Excuse for the bit complex text below, I don't know how to say it more
simple


I have a small problem with the way ReverseRelationships are connected to
Party in the Demographic RM.
Maybe my problem is because of my misunderstanding. 

The problem is not only conceptual, but it also causes problems in coding
(programming) the kernel.

The problem is that ReverseRelationships are a Set of LocatableRef. This
means that the PartyRelationship has to be stored before it can be added to
a party ReverseRelationship list.
The PartyRelationship has to be stored because LocatableRef takes a
ObjectVersionID as constructor-argument.


I presume this is in the Java implementation, since constructors are not
defined in the openEHR specifications? Obviously using constructors is not
the only possibility, setter routines could also be used. IN any case,
creation of identifiers does not rely on persistence; it should be knowable
beforehand, so I would expect the use of a constructor to be fine.





The conceptual problem is that the ReverseRelationship in this way is
defined as a version of a specific PartyRelationship. If the
PartyRelationship changes, for example in its details, than the new version
is not anymore connected to the target-Party, or this connection needs extra
code to restore 

(replace the ObjectVersionID in the target-Party ReverseRelationship-set,
maybe even create a new version of the PArty, because of a new version in
another object, namely the PartyRelationship-object)


the reverse_relationships attribute of PARTY is intended to contain a set of
reverse pointers to PARTY_RELATIONSHIPs for which the PARTY is a 'target'.
The first thing to note is that the attribute is optional, and you can
ignore it if you want. If you use it, it should always contain the current
list of PARTY_RELATIONSHIPs for which the PARTY is a 'target'. If any such
relationship is changed, then the relevant PARTYs would have to be updated.

The problem you point out is that if the change in the PARTY_RELATIONSHIP
(taking it from version 3 to 4, let's say) doesn't affect a given PARTY,
which is a target of version 3 of the PARTY_RELATIONSHIP, then you are still
forced to update the PARTY so that it its reverse_relationships now has the
v4 id for the updated PARTY_RELATIONSHIP rather than the v3 id. One way to
fix this would be if we were to enable a 'latest' version id that always
automatically pointed to the latest version of something. This is defined
for openEHR EHR URIs, but not for the type OBJECT_VERSION_ID, used in
LOCATABLE_REF. 

I think a better solution is that PARTY simply does not contain reverse
relationships, because it is essentially solving a database indexing
problem, which could be better solved by maintaining index objects and/or
native indexes, depending on how the demographic model persistence is
implemented.





I don't understand why that is, it seems a bad thing which causes extra
complexity.
More logically would seem to me to connect the UID of to the list
ReverseRelationships in the target Party, instead of the ObjectVersionID.


that would probably risk the reverse_relationships attribute getting out of
data quickly and containing wrong information, unless the implementation
meticulously checked whether the validity was always maintained or not.

I would be interested to know what other experience there is with this
attribute; my suspicion is that it should be deprecated.

- thomas

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
<http://lists.openehr.org/mailman/private/openehr-technical_lists.openehr.org/attachments/20110429/68009f4e/attachment.html>

Reply via email to