Je travaille sur un projet pour lequel nous avons besoin de données entrées ou mises à jour par certains utilisateurs avant d'être ajouté aux données en temps réel.Conception de la base de données pour l'approbation de la mise à jour des données
Lors de la préparation des données, l'utilisateur peut enregistrer des enregistrements incomplets. Alors que les données sont dans le statut en attente, nous ne voulons pas que les données affectent les règles imposées aux utilisateurs qui éditent les données en direct, par exemple. un utilisateur travaillant sur les données en direct ne doit pas se heurter à une contrainte unique lorsqu'il saisit les mêmes données qui sont déjà en attente.
Je prévois que les ensembles de mises à jour de données seront regroupés dans une «soumission de données» et les données seront re-validées et corrigées/rejetées/approuvées quand quelqu'un contrôle la qualité de la soumission.
J'ai pensé à deux scénarios en ce qui concerne le stockage des données:
1) Garder les données d'état en attente dans la même table que les données en temps réel, mais en ajoutant un drapeau pour indiquer son statut. Je pourrais voir des problèmes ici avec devoir enlever des contraintes ou rendre des champs exigibles nullables pour soutenir les données d'état «incomplètes». Ensuite, il y a le problème avec la façon de gérer la mise à jour des données existantes, vous devez ajouter une nouvelle ligne pour une mise à jour et la lier à la ligne 'live' existante. Cela me semble un peu compliqué.
2) Ajouter de nouvelles tables qui reflètent les tables dynamiques et y stocker les données jusqu'à ce qu'elles soient approuvées. Cela me permettrait de garder un contrôle total sur les tables en direct existantes tandis que les tables 'en attente' peuvent être abusées avec tout ce que l'utilisateur pense qu'il veut y mettre. L'inconvénient de ceci est que je vais finir avec beaucoup de tables/SP supplémentaires dans la DB. Une autre question à laquelle je pensais était de savoir comment un utilisateur peut relier deux enregistrements, l'enregistrement lié à peut être un enregistrement dans la table en direct ou un dans la table en attente, mais je suppose que dans cette situation, vous pouvez toujours prendre une copie du dossier lié et le traiter comme une mise à jour?
Aucune des deux solutions ne semble parfaite, mais la deuxième me semble être la meilleure option - existe-t-il une troisième solution?