-
Notifications
You must be signed in to change notification settings - Fork 3
Module versioning
# Module Versioning Description ala Archivage.
Par défaut, chaque action de modification d'une table en base de données (read, update ou delete) donne lieu à la création d'une version.
La création d'une version est réalisée par le stockage des différences lors de la modification d'un tuple. Ces différences sont stockées sous forme de clé-valeur consignant la valeur d'avant et d'après la modification pour chaque champs modifié du tuple en question.
Le versioning stocke une liste des tuples concernés pour chaque version, dans la table versions_relations. La liste des tuples concernés désigne l'ensemble des tuples d'autres tables référencés par le tuple en cours de versionnage - et ceci de manière récursive.
Chaque différence étant stockée sous forme de version, n'importe quelle version d'un tuple peut être reconstituée - en prenant la version courante d'un tuple et en y appliquant successivement et dans l'ordre déchronologique les différences de chaque version.
L'archivage est implementé dans la classe iaModelMysql.
- La méthode iaModelMysql::version() effectue l'opération de versioning, c'est-à-dire le stockage des différences
- La méthode iaModelMysql::get_version() prends en charge la reconstruction des données pour fournir une version donnée d'un tuple
- La méthode iaModelMysql::version_store_relations() consigne les tuple concernés par la version en cours de stockage - par exemple, une modification dans un tuple d'une table adresses, liée à une table personnes, concerne également le tuple de cette table personnes
- La propriété iaModelMysql::$archive_foreign_models est utiliser pour calculer les tuple concernés par une version
- La propriété iaModelMysql::$versionable permet d'autoriser un modèle à être versionné
Le versioning permet de stocker les différences à chaque modification d'un enregistrement en base de données. Il a les caractéristiques suivantes:
- En lecture seule par nature
- Table de stockage à clé primaire BIGINT pour supporter un grand nombre d'enregistrements
- Implémente la gestion d'accès, l'utilisateur ne peut accéder qu'à l'historique des ressources auxquelles il a accès
- Une version correspond à une et une seule opération CRUD sur un tuple