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.
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:
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.
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.
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
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
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.
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.
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.
Tags und Links database-design