db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alessandro Bottoni <alexbott...@yahoo.it>
Subject Re: How would you implement a record-level versioning system with Derby and Java?
Date Thu, 09 Jul 2009 14:44:50 GMT
Donald McLean ha scritto:
> Actually, this is a question that I have previously considered for a
> project that I am starting.
> 
> My thought was to have an identity column (value assigned by the DBMS)
> and a separate ID column. From here, you can do several different
> things:
> 
> 1. Have a "version" column. Use the max function to find the current
> version, or make the current version -1 or something else easy to
> find.
> 2. Use the max function on the identity column to find the latest version.

I thought about this mechanism but I'm not completely convinced it would
be the right one. I mean, there are two different "user views" to take
into account:

1) The user view onto the whole database while browsing/searching for a
specific record.
2) The single-record view used to examine/edit a specific record.

While it is easy to use a SELECT with MAX to get the latest version of a
specific record, it is not clear how I could get only the most recent
version of every single record to build up the "browse" view. It looks
like I should use a nested SELECT:  first, select all matching records
and, second, select the latest version of  each of them. A little bit
messy...

> 3. Have "previous" and "next" columns with the identity values of the
> appropriate objects in the chain. The current version would have a
> null "next".

Nice approach! Actually, I did not think about this possibility. Many
thanks for this suggestion.

This would simplify a lot the SELECT operation used to generate the
"browse" view (just select all of the records that have a NULL
"next-version" field) while maintaining the possibility to go back and
forth between versions (and build up a list of them, if needed).

I think I will experiment with this one.

> There are probably other approaches that I haven't thought of.

I thought about triggers/procedures, as well, but I had the feeling they
would have the same problem as the SELECT + MAX approach.

> I have used and recommend Hibernate. It simplifies things immensely
> IMO, though it does have its quirks (some of which are not properly
> explained by the documentation). It also works well with a number of
> other DBMS (if changing is something that might happen later).

Thanks. I'm new to Hibernate, as well, so I'm going to ask you (all)
which book is best for learning Hibernate. I browsed a little bit on
Amazon's but I did not find anything to be enthusiastic about. What
would you suggest me as a good starting point/introductory book?

Any good web article/tutorial to signal, as well?

Thanks again.
-- 

Alessandro Bottoni
Website: http://www.alessandrobottoni.it/

"In mathematics you don't understand things. You just get used to them."
     -- John von Neumann

Mime
View raw message