J'ai une base de données dans laquelle je stocke des objets. Je le schéma suivant (simplifié)Algorithme de contrôle de version
CREATE TABLE MyObjects
(
UniqueIdentifier Id;
BigInt GenerationId;
BigInt Value;
Bit DeleteAction;
)
Chaque objet possède un identifiant unique ("Id"), et un (ensemble de) propriété ("Value"). Chaque fois que la valeur de la propriété d'un objet est modifiée, j'entre une nouvelle ligne dans cette table avec un nouvel identifiant de génération ("GenerationId", qui augmente de façon monotone). Si un objet est supprimé, j'enregistre ce fait en mettant le bit "DeleteAction" à true.
À tout moment (génération), je voudrais récupérer l'état de tous mes objets actifs!
Voici un exemple:
Id GenerationId Value DeleteAction
1 1 99 false
2 1 88 false
1 2 77 false
2 3 88 true
Objets générations sont:
1: 1 {99}, 2 {88}
2: 1 {77}, 2 {88}
3: 1 {77}
La clé est: comment puis-je trouver la ligne pour chaque objet unique qui est id de génération est la plus proche (mais ne dépassant pas) à un identifiant de génération donné? Je peux ensuite faire une étape post-filtre pour supprimer toutes les lignes où le champ DeleteAction est vrai.
Je ne suis pas l'exemple de vos objets dans les générations. Pourriez-vous clarifier. –
Il y a une faute de frappe dans l'exemple, il semble que l'ID génération 1 est utilisé deux fois. – bortzmeyer
Non, le but était de montrer que les objets 1 et 2 sont ajoutés dans la même génération 1. Un exemple du contrôle de source serait d'ajouter 2 fichiers dans un ensemble de modifications, où la génération est le nombre de changeset. –