Remember not the whole road's measurements are changed, only a portion between a start and end km.
Then I would find a way of identifying each "bit" of the road - e.g.
What3words[
^]
Make that fixed. So if work encroaches into a neighbouring section then that 3m square is also re-measured - even if it the same as before.
I have created audit tables that are populated with triggers. But that is difficult to select the valid data at a specific date.
I don't see why that would be difficult, but it is difficult to offer help without details of those tables.
An alternative approach (used where I currently work), is to record the changes on the same table in a new row - each row has a valid-from and valid-to date ("current" record has valid-to date of 9999-12-31). That way you are not relying on your audit table(s) and can quite quickly determine which records were "current" at any particular time.
It should also be more performant because there will be no need for the triggers ... use a Stored Procedure to upsert so that you maintain the date sequence consistently.
Edit: Just noticed
Quote:
Data is just text
If these are measurements then use the appropriate data types - Dates should be stored in
date
or
datetime
column types and numerical data should be stored in a numerical column type. Apart from wasting space and being inefficient, using the wrong data type can lead to all sorts of problems that can be very difficult to diagnose and fix.