Frage

ich eine Audit-Tabelle erschaffe für Änderungen an einem Datensatz in Haupttabelle getan zu verfolgen.

Hier Audit-Tabelle ist die exakte Kopie der Haupttabelle (zB Mitarbeiter Tabelle), aber nur für alle Änderungen geschieht in der Haupttabelle ‚Einsätze‘ hat. So wird es haben Duplikate (gleiche EmployeeIDs), so sollte ich hinzufügen separaten Audit_ID für jeden Eintrag?

War es hilfreich?

Lösung

Sicher müssen Sie irgendeine Art von Primärschlüssel in der Tabelle.

Es wird leichter sein, um Duplikate zu entfernen und den ‚Grund des Einsatzes‘ zu verfolgen (für Debug-Zwecke), wenn Sie eine haben.

Einig RDBMS ist (wie MySQL mit InnoDB) tatsächlich einen versteckten Primärschlüssel für Sie zu erstellen, wenn Sie es nicht explizit zu tun haben, so tun Sie es einfach selbst und macht, wenn sichtbar und nutzbar.

Andere Tipps

Sie ziemlich wurde zu, wie während der EmployeeID in Mitarbeiter einzigartig sein wird (ein Update wird nicht eine neue Zeile hinzufügen, ändern nur die vorhandene Zeile), wird die Audit-Tabelle mehrere Zeilen mit die gleiche EmployeeId (ein für den anfänglichen Einsatz, ein für jede nachfolgende Aktualisierung des Arbeitnehmers).

Außerdem sind die Einheiten in Mitarbeiter Mitarbeiter. Aber die Entitäten in Prüfung sind Audit-Aufzeichnungen. Sie shoulld ihre eigene ID haben.

Sie werden dies wollen, wenn überhaupt etwas schief geht und Sie müssen, um tatsächlich aktualisieren oder eine Audit-Aufzeichnung zu löschen. Tatsächlich, wenn ein Mitarbeiter eingesetzt wird, dann wird der Wert einer Spalte aktualisiert wird, dann wieder aktualisiert, um den ursprünglichen Wert zu sein, haben Sie jetzt zwei identische Datensätze in Prüfung. Welche müssen zusammen würden gelöscht oder aktualisiert (sofern Sie eine limit-Klausel in Aktualisierung verwendet oder löschen.) Messy.

Welche oben zeigt auch die Nützlichkeit einen Zeitstempel auf die Audit-Tabelle zu hinzuzufügen. Aber glaube nicht, sollten Sie diese wählen und EmployeeId als Verbundschlüssel. Zuerst zusammengesetzte Schlüssel saugen. Zweitens ist es durchaus möglich, einen Zeitstempel der Granularität ist weniger als die Zeit, um Ihr System würde zwei Updates durchführen (zwei Updates des gleichen Mitarbeiter, wie etwa in einem Batch-Betrieb). (A Sybase Datetime hat eine drei Millisekunden Granularität;. Ein Intel Core 2 Extreme können in dieser Zeit fast 200 Millionen Anweisungen tun)

Ja. Ich glaube, dass ein nicht-semantischen Primärschlüssel in jeder Tabelle eine bewährte Methode ist, da es Ihnen erlaubt, es auf pragmatische Weise zu verweisen. Sie können visualisieren leichter weit „die Änderungen von audit-id audit-id+1“ als Daten verwendet wird.

Sie können den Mitarbeiter-ID und den Audit-Datetime als Verbundschlüssel verwenden ...

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