Frage

Ich habe eine DB, die verschiedene Arten von Aufgaben und mehr Elemente in verschiedenen Tabellen speichert. In vielen dieser Tabellen (dass ihre Struktur anders ist) brauche ich eine Möglichkeit, es zu tun, dass der Artikel doppelt überprüft werden muss, was bedeutet, dass der Artikel nicht "gespeichert" werden kann (ich meine natürlich, es wird gespeichert) Bevor jemand anderes in das Programm geht und es bestätigt.

Was sollte der richtige Weg sein, um zu sagen, welcher Artikel bestätigt wird:

  1. Jede dieser Tabellen sollte eine Spalte "is confirmed" haben. Wenn dieser Typ dann alle Dinge bestätigen möchte, geht das Programm durch alle Tabellen und erstellt eine Liste der Elemente, die nicht überprüft werden.
  2. Es sollte eine dritte Tabelle geben, die den Tabellennamen und die ID dieser Zeile enthält, die bestätigt werden muss.
  3. Ich hoffe, Sie haben eine bessere Idee als die beiden oben genannten Hässlichen.
War es hilfreich?

Lösung

Ist der doppelt bestätigte Status etwas, das genau einmal für ein Unternehmen passiert? Oder kann es abgelehnt und erneut Bestätigung durchgehen? Müssen Sie im letzteren Fall die ganze Geschichte behalten? Müssen Sie diejenigen, die bestätigt haben, verfolgen, wer dies bestätigt hat (z. B. zB, damit Sie nicht die gleiche Person haben, die beide Bestätigungen durchführt)?

Der einfache Fall:

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

Wenn die erste Bestätigung:

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

Bei zweiter Bestätigung:

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

Wenn abgelehnt:

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

Jetzt kann Ihr Hintergrundjob offensichtlich nur Zeilen behandeln, bei denen verarbeitet wurde = 0 und BestätigenCount = 2. dann, wenn es diese Zeile verarbeitet hat:

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

Wenn Sie ein komplexeres Szenario haben, geben Sie bitte mehr Details an, einschließlich der Ziele des doppeltkonfessionellen Prozesses.

Andere Tipps

Erwägen Sie, eine neue Tabelle hinzuzufügen, um die zu bestätigenden Aufzeichnungen zu halten (z. B. TaskStobeConfirmed). Verschieben Sie diese Aufzeichnungen nach Bestätigung der Aufzeichnungen in die permanente Tabelle (Aufgaben).

Der Nachteil der Hinzufügen einer "isconfirmed" -Spalte besteht darin, dass praktisch jede SQL -Anweisung, die die Tabelle verwendet, auf "conborded" filtern muss, um zu verhindern, dass sie unbestätigte Aufzeichnungen erhalten. Jedes Mal, wenn dies übersehen wird, wird ein Defekt eingeführt.

In Fällen, in denen Sie bestätigt und unbestätigte Aufzeichnungen benötigen, verwenden Sie Union.

Dieses Muster ist etwas mehr Arbeit, um zu codieren und zu implementieren, verbessert jedoch die Leistung erheblich und reduziert Defekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top