Bonjour je suis confronté à un problème de conception et je me demande quel est le meilleur moyen de le résoudre.
J'ai une DB dans laquelle je modélise un objet qu'on appel "rapport" ce rapport utilise plusieurs tables pour être créé, dans l'utilisation métier de ce rapport il a deux états :
1 état validé ou l'utilisateur final peut utiliser ce rapport car il est validé par son propriétaire
1 etat où il est en modification, mais dans cet état le rapport d'origine (celui qui sert de base a la modification) doit toujours être actif avec les données d'origines, pendant que le propriétaire modifie ce rapport, jusqu'a ce qu'il soit validé puis remplace le rapport d'origine.
Je me suis donc dit que je devais faire une table "tampon" un clone du rapport d'origine que je laisserais libre à la modification (pdt ce temps le rapport d'origine est toujours utilisable dans l'état) jusqu'a ce qu'il soit validé, alors je copie l'ensemble des données modifiées dans le rapport d'origine et j'incrémente ma version. le rapport est donc disponible avec les nouvelles données.
Mais j'ai pas mal de relation oneToMany et manyToOne dans les tables qui concerne ce rapport, alors la table tampon peut du coup être tres redondante car elle va devoir entretenir les liens avec toutes les relations de la table rapport.
je me demande si c'est la bonne solution? ou si je ne devrais pas m'orienter vers un systeme de "versionning" ou seul les data modifiées seraient enregistrées dans une table qui contiendrait uniquement un lien avec la table a modifié, le champ de la table, et la version. du style
id | nom de la table | champ | data | version
1 | rapport | activite| 12 | 1
2 | pieces | design|montre| 1
puis lorsque le rapport est validé, les data de ma table "versionning" sont persisté dans les tables d'origines, donc je n'ai plus de système de "clone"
Vos lumières sont les bien venues , je suis un peu pommé ;-)
merci et bonne année
Partager