On contract for a customer I had to develop a temporal database manager.
The problem is very simple. You have an entity that exists from a data to another date and is dependent on another entity to exist in the same period.
Consider the example below, this is a valid dependency, because, the dependency exists in atleast the same period as the entity.
Entity
I-------------I
Dependency Entity
I-------------------I
Legend:
lines represent the existance of the entities
Considering you have to edit an entity, you have two basic changes you can make.
Edit attributes of an entity, creating a new record from that point, or
Edit the period in which the entity exists
Editing attributes
Entity
I-------I (attribute changed on this date)
I----I
Dependency Entity
I-------------------I
- dependency is still valid
Editing period
Entity
I-------I (end date of entity is sooner)
Dependency Entity
I-------------------I
- dependency is still valid
Now consider the situation where a user makes an invalid edit.
Invalid edit
Entity
I-------------------I (end date of entity is later)
Dependency Entity
I-------------------I
- dependency is NOT valid
The main point of this last example is that there's a lot of checks that need to be made before editing something.
The database I've made with the customer consists of multiple tables 20+, that are all interdependent.
The component I've written is an ORM with temporal management built-in and transparently handles these relation restrictions as defined in the business logic.
Although very clean, it poses some challenges in a UI. If you need to edit several types of entities in the same submit, you could end up having dependencies, that may put the user in a deadlock. Therefore, one should consider if temporal management of an entitty is really necessary to store temporally.
KHANDI Component short:
temporal ORM manager
compliable with java 1.4
Connects with SAS and MySQL out of the box, easily integratable with other dbs
Write me at kennethhn@gmail.com, if interested in knowing more.