Faccio qualcosa come il tuo secondo approccio:avere la tabella con il working set effettivo e una cronologia con le modifiche (timestamp, record_id, property_id, property_value). Ciò include la creazione di record. Una terza tabella descrive le proprietà (id, nome_proprietà, tipo_proprietà), che aiutano nella conversione dei dati più in alto nell'applicazione. Così puoi anche monitorare molto facilmente le modifiche delle singole proprietà.
Invece di un timestamp potresti anche avere un int-like, che incrementi per ogni modifica per record_id, quindi hai una versione effettiva .