Here is the table structure:
Customer
CustomerID_PK
PreviousVersion_FK
Name
Address
City
State
Country
LastUpdtTime
CustomerHistory
CustomerID_PK
PreviousVersion_FK
Name
Address
City
State
Country
LastUpdtTime
In the Customer table, PreviousVersion_FK references CustomerHistory.CustomerID_PK.
In the CustomerHistory table, PreviousVersion_FK _also _references CustomerHistory.CustomerID_PK.
This establishes a linked-list in the database, the Customer table only holds current records, but each may have a reference via the PreviousVersion_FK to the most recent previous version. In CustomerHistory, PreviousVersion_FK holds a reference to the version before this one. This linked-list ends when PreviousVersion_FK is null, indicating the original version of the Customer record inserted.
So, I'm planning to use a ConcurrencyPredicate to address the need to detect intervening changes (via the LastUpdtTime field). And the update trigger will take care of the copying of the (about to be no longer current) version of the Customer record to the CustomerHistory table. Note that only the PreviousVersion_FK of the incoming Customer record will be affected by the trigger (setting it to the value of CustomerHistory.CustomerID_PK of the record inserted into CustomerHistory.)
Having explained this, I'm becoming convinced that it will work, but does anyone see any gotcha's?