Une technique que j'ai utilisée pour cela dans le passé a été d'avoir un concept de "générations" dans la base de données, chaque changement incrémente le numéro de génération actuel pour la base de données - si vous utilisez subversion, pensez aux révisions. Chaque enregistrement est associé à deux numéros de génération (deux colonnes supplémentaires dans les tables) - la génération pour laquelle l'enregistrement commence à être valide et la génération pour laquelle il cesse d'être valide. Si les données sont actuellement valides, le deuxième numéro sera NULL ou un autre marqueur générique.
Donc pour insérer dans la base de données :
- incrémenter le numéro de génération
- insérer les données
- étiqueter la durée de vie de ces données avec un début de validité et une fin de validité de NULL.
Si vous mettez à jour certaines données :
- marquer toutes les données qui sont sur le point d'être modifiées comme valides au numéro de génération actuel
- incrémenter le numéro de génération
- insérer les nouvelles données avec le numéro de génération actuel
La suppression consiste simplement à marquer les données comme se terminant à la génération actuelle.
Pour obtenir une version particulière des données, trouvez la génération que vous recherchez et recherchez les données valables entre ces versions de génération.
Ejemplo:
Créez une personne.
|Name|D.O.B |Telephone|From|To |
|Fred|1 april|555-29384|1 |NULL|
Mise à jour du numéro de téléphone.
|Name|D.O.B |Telephone|From|To |
|Fred|1 april|555-29384|1 |1 |
|Fred|1 april|555-43534|2 |NULL|
Supprimez Fred :
|Name|D.O.B |Telephone|From|To |
|Fred|1 april|555-29384|1 |1 |
|Fred|1 april|555-43534|2 |2 |
0 votes
Voir cette question existante
0 votes
Voir stackoverflow.com/questions/323065/ .