A committed version of a data table is stored in a base table that
includes a timestamp column that indicates when the most recent change to
each row was committed. Changes to the base table are stored in three
versioned tables: a version add table, a version modify table, and a
version delete table. A version view table reconstructs the data stored
in the base table and the versioned tables to provide an external view of
each version. When a change is made, the change is stored in the
appropriate versioned table with the corresponding timestamp from the
base table. When the change is submitted, the "stored" timestamp in the
versioned table is compared with the "current" timestamp in the base
table. If the stored timestamp is equal to the current timestamp, then
there is no conflict and the change is committed. If the stored timestamp
is not equal to the current timestamp, then there is a conflict. A user
may choose to merge and commit a conflict or to rollback and not commit
the conflicting.