As suggested, I've started a new thread to discuss what might be needed for Enterprise scale modelling of multiple states in time. This post address the concepts involved so we can agree on what we are talking about and then look at options for implementation.
Time flows (for us humans at least). What we consider to be the "present" state changes over time. In database architectures, we can handle how records change over time with State Episodes (the record was in this state for this episode of time). Using State Episodes, we can hold both historical changes of state and proposed future state(s) in addition to the present state. One thing we can't do is hold alternate future states (at least not with standard State Episodes).
Because of the effluxion of time, there is only one present state and one "thread" of historical states. With Standard State Episodes, one can hold a single "thread" of future states.
Historical states are (supposed to be) immutable. The past is the past! Whereas, the future is subject to change. To quote Neils Bohr (disputed), "Prediction is difficult - especially about the future!".
The present is just the present - "As Is" - although what it contains changes with the effluxion of time.
Using state episodes, one can query the object and determine its state at any point in time, seamlessly.
One of the changes that the future is subject to, that that of alternate planning. In real life (and therefore in modelling), we need to handle alternate, competing, possibilities for a solution while we are investigating the problem and its possible solution(s). Eventually, we hope, one solution will win out and will be adopted as the "To-Be" solution, which when implemented and the effluxion of time has caught up with the future will become the new "As-Is". One might say, in addition to a "To-Be", we also need several "Might-Be".
While Sparx EA does not actually hold state episodic data, it utilises the single thread concept as part of its time aware modelling.
EA uses the concept of doppelgangers or clones to (at least some extent) simulate state episodes. While not able to achieve the seamless determination of the object state at an arbitrary point in time, a clone (version) of the object is created at nominated points so that changes in a specific version are not also made in other versions.
Unlike a state episodic item, there is no single "identity", rather the single "thread" of clones establishes how the item has changed in each version.
In real life (and therefore in modelling), we need to retain knowledge of "As-was". There is a conceptual difference between "As-Was" and the other two viewpoints. "As-Was" as mentioned above is immutable. We'd like to be able to recreate the state of an item at any point in the past for which we were tracking it, but that's not possible. We can only take a "snapshot" of the item at a point in time. Thus, we aren't really creating an "active" clone of the present (at the point at which we took the snapshot), but a "frozen" doppelganger. It seems to me, therefore, that the semantic relationship between the past doppelgangers and the present is distinct from that of the future clones and the present. In addition, while there is no direct relationship between the past doppelgangers (since they each came from a snapshot of the evolving present) there is an inferred relationship between them.
In EA, we already know how to create snapshots, we just export the branch and re-import using "Strip GUIDs". All we need to do is to link the doppelganger with its master. Not hard to do if we add a Tagged Value holding the original, master, GUID before export. We can use the same GUID to link the other past doppelgangers to the new one.
Thoughts?
Paolo