I'm trying to model data & its flow in a software system which needs different version of values to be tracked. The problem is that there is different entity types which are needed to be tracked over time (versions), so I thought about that and I ended up to define a global time concept in the system: A reference to a unique entity will be define as: Ref(EntityType, UniversalKey, TimeTick) which TimeTick is an incremental value per isolated business issue (for example in a project management system, two projects will have seperated TimeTick values, cause those projects are different kind of universe!) and the relation/problem will be something like this:

Ref(ImportedFile, "Tasks-A", 1)
Ref(TaskDef, "XYZ", 2)
Ref(Processing, "XYZ", 3)
Ref(Result, "XYZ", 4)

Note: The Tasks-A will contain numbers of TaskDef, but I just mantioned only one value.

In the above case when a new version of Tasks-A is available, it's possible that some TaskDefs has been changed:

Ref(ImportedFile, "Tasks-A", 5)
Ref(TaskDef, "XYZ", 6)

In the response to this the model should be able to match the previously processed Result with updated TaskDef which I'm trying to resolve this by UniversalKey and track differences with TimeTick

Right now I'm looking for similar patterns & experiences to get better understanding of possible dark-side of this solution.

  1. What's the possible dark-sides of this approach? Where I can find more detail on these kind of patterns?
  2. When data granularity will change, what's a good way to handle the situation? for example consider multiple Result per Processing! Obviously It needs a way of grouping Result per Processing and being able to match Results with TaskDef! Should I split the UniversakKey or add GroupingKey? Any suggestion?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.