Die beste Methode zum Verwalten des Aktualisierungs-Review-Publish-Workflows?

8

Ich verwalte einen Online-Katalog. Derzeit aktualisiert das interne Personal es manuell, und ihre Änderungen sind sofort sichtbar. Jetzt wollen wir einen Bestätigungsschritt hinzufügen: Tom ändert, Jerry genehmigt es.

Ich sehe zwei Wege, aber keine scheint elegant.

  1. Behalte eine zweite, 'Arbeitskopie' der gesamten Datenbank.
  2. Halten Sie einen zweiten Satz von 'schmutzigen' Tabellen in derselben Datenbank.

Beide scheinen eine Menge Code nur für die Verwaltung zu benötigen, sowie die Arbeit zu verdoppeln, wenn sich die Struktur einer Tabelle ändert.

Gibt es einen besseren Weg? Wenn es darauf ankommt, ist das DBMS SQL Server, die Webanwendung ist asp.net.

Bearbeitet zum Hinzufügen:

  1. Die beiden oben beschriebenen Änderungen sind beide abwärtskompatibel mit dem vorhandenen Code. Ich weiß, dass ich einige Änderungen vornehmen muss, aber ich kann jede Abfrage nicht ändern.

  2. Ich glaube, meine wichtigsten Einschränkungen verbieten es, Zeilen einfach zu klonen und sie als "ausstehend" zu kennzeichnen.

Nehmen wir an, der Lieferant mit SupplierID 99 hat zwei Produkte. (Produkte können nur zu einer Lieferanten-ID gehören.) Die Telefonnummer des Lieferanten hat sich geändert, daher klon ich den Lieferanten-Datensatz, ändere die Telefonnummer und markiere sie als "ausstehend". Aber der neue Datensatz kann keine ID von 99 haben, daher gibt es keine Möglichkeit mehr, ihn entweder mit seinen Produkten oder sogar mit dem Datensatz, den er ersetzen soll, zu verbinden.

Ich nehme an, ich könnte einen unbeschränkten Bezeichner hinzufügen, SupplierPseudoID, aber das erscheint genauso kompliziert und fehleranfällig wie die obigen Ideen.

    
egrunin 19.02.2010, 20:37
quelle

3 Antworten

6

Warum brauchen Sie eine Kopie der Tabellen? Warum nicht einfach ein approved -Feld in die Tabelle einfügen?

Beantworten Sie die Bearbeiten:

Wenn Sie eine Tabelle wie

haben %Vor%

Sie können es einfach ändern, um ein neues Feld namens appoved hinzuzufügen und den Primärschlüssel sowohl id als auch modified

zu setzen %Vor%

Sie erstellen eine Ansicht, die nur Sie

bringt %Vor%

Wenn Sie es als etwas wie SELECT id, name, text, modified, etc FROM catalog WHERE approved = 1; definieren, müssen Sie nur die "Tabelle" ändern, aus der die Abfragen ausgewählt werden. Um zu vermeiden, dass Sie die Einfügung ändern müssen, sollten Sie einem Standardwert von 0 zustimmen und die Aktualisierungsabfragen ändern, um etwas wie

zu tun %Vor%

was mit etwas wie

enden würde %Vor%

und das neue Bit der Schnittstelle, das Sie tun müssen, um "ein Feld zu genehmigen", müsste

%Vor%

was zu

führen würde %Vor%

Dieses letzte Bit könnte noch mehr vereinfacht werden, wenn Sie dazu einen Trigger oder eine gespeicherte Prozedur erstellen.

Dies ist ein sehr vages Beispiel, passen Sie sich Ihren Bedürfnissen an.

    
voyager 19.02.2010, 20:49
quelle
1

Ich hätte ein genehmigtes Feld und ich hätte einen Auslöser für das Feld, der die Änderungen auf den Status approved begrenzen würde und nur von Benutzern in einer bestimmten Rolle des Genehmigers kommen würde (wenn Sie keine Rolle oder Gruppentyp haben) für Ihre Benutzer müssen Sie auch wissen, wer autorisierte Benutzer und Genehmiger sind. Auf diese Weise, wenn Sam versucht, seine eigene Änderung zu genehmigen, kann es nicht passieren. Ich würde wahrscheinlich auch einen Mechanismus zur Überprüfung haben, um sicherzustellen, dass ein Genehmiger wer macht eine Änderung muss seine Änderung von einer anderen Person genehmigt haben.

Ihre Anwendung müsste auch geändert werden, damit allgemeine Benutzer des Katalogs nur genehmigte Änderungen sehen, sofern sie nicht die Person sind, die die Änderung oder die Genehmiger initiiert hat.

    
HLGEM 19.02.2010 20:56
quelle
1

Veröffentlichen Sie einfach Ihre wichtige Tabelle mit Status.

Gleiche Tabelle, nur zusätzliche Zeilen. Fügen Sie der Tabelle einen "effektiven Datumsbereich" hinzu.

%Vor%

Wenn Sie die Daten ändern möchten, kopieren Sie die Zeile, ändern Sie den Status in "REVIEW" (oder was auch immer, wie viele Schritte Sie haben).

Dann können Ihre Kritiker das sehen.

Wenn Sie "publizieren", wird der aktuelle "APPROVED" zu "ARCHIVED", end_date="today" und die Zeile "REVIEW" wird zu "ACCEPTED" mit einem Null-Enddatum und Startdatum="Today".

Der schöne Teil davon ist, dass es ziemlich trivial ist, eine Änderung schnell rückgängig zu machen, wenn Sie möchten, und Sie haben immer eine Geschichte. Später können Sie alte ARCHIVED-Daten löschen, wenn Sie dazu geneigt sind.

Sie können auch Artikel vorverkaufen, die erst am ersten des Monats in den Handel kommen.

    
Will Hartung 19.02.2010 21:19
quelle

Tags und Links