Question

J'ai un DB qui stocke différents types de tâches et d'autres articles dans différents tableaux. Dans beaucoup de ces tableaux (que leur structure est différente) je besoin d'un moyen de le faire que l'élément doit être vérifié, ce qui signifie que l'élément ne peut pas être « sauvé » (je veux dire bien sûr, il sera sauvé) avant que quelqu'un d'autre va dans le programme et le confirme.

Quelle devrait être la bonne façon de dire quel élément est confirmé:

  1. Chacune de ces tables doit avoir une colonne « IsConfirmed », puis quand ce gars-là veut confirmer tous les trucs, les promenades à travers le programme toutes les tables et crée une liste des éléments qui ne sont pas vérifiés.
  2. Il devrait y avoir une troisième table qui contient le nom de table et Id de cette ligne qui doit confirmer.
  3. J'espère que vous avez une meilleure idée que les deux Uglies ci-dessus.
Était-ce utile?

La solution

Le double statut confirmé quelque chose qui se produit une seule fois pour une entité? Ou peut-il être rejeté et le besoin d'aller à nouveau par la confirmation? Dans ce dernier cas, avez-vous besoin de garder toute cette histoire? Avez-vous besoin de garder une trace de qui a confirmé à chaque fois (par exemple si vous ne disposez pas de la même personne qui effectue les deux confirmations)?

Le cas simple:

ALTER TABLE dbo.Table ADD ConfirmCount TINYINT NOT NULL DEFAULT 0;
ALTER TABLE dbo.Table ADD Processed BIT NOT NULL DEFAULT 0;

Lorsque la première confirmation:

UPDATE dbo.Table SET ConfirmCount = 1 WHERE PK = <PK> AND ConfirmCount = 0;

Le deuxième confirmation:

UPDATE dbo.Table SET ConfirmCount = 2 WHERE PK = <PK> AND ConfirmCount = 1;

Rejetées:

UPDATE dbo.Table SET ConfirmCount = 0 WHERE PK = <PK>;

Maintenant, évidemment, votre travail de fond ne peut traiter les lignes où transformés = 0 et ConfirmCount = 2. Puis, quand il a traité cette ligne:

UPDATE dbo.Table SET Processed = 1 WHERE PK = <PK>;

Si vous avez un scénario plus complexe que cela, s'il vous plaît fournir plus de détails, y compris les objectifs du processus à double confirmation.

Autres conseils

Pensez à ajouter une nouvelle table pour tenir les dossiers à confirmer (par exemple TasksToBeConfirmed). Une fois que les dossiers sont confirmés, déplacer ces enregistrements à la table permanente (tâches).

L'inconvénient d'ajouter une colonne « IsConfirmed » est que pratiquement chaque instruction SQL qui utilise la table devra filtrer « IsConfirmed » pour éviter d'obtenir des documents non confirmées. Chaque fois que cela est manquée, un défaut est introduit.

Dans le cas où vous avez besoin confirmé et les dossiers non confirmées, l'utilisation UNION.

Ce modèle est un peu plus de travail à coder et mettre en œuvre, mais dans mon expérience, améliore considérablement les performances et réduit les défauts.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top