Je fais quelque chose comme votre deuxième approche :avoir la table avec le jeu de travail réel et un historique avec les modifications (horodatage, record_id, property_id, property_value). Cela inclut la création d'enregistrements. Un troisième tableau décrit les propriétés (id, property_name, property_type), ce qui aide à la conversion des données plus haut dans l'application. Ainsi, vous pouvez également suivre très facilement les modifications de propriétés individuelles.
Au lieu d'un horodatage, vous pouvez également avoir un int-like, que vous incrémentez pour chaque changement par record_id, vous avez donc une version réelle .