2012-03-29 4 views
0

Um Soft Delete zu vermeiden, erstelle ich eine Papierkorb-Datenbank. Die Hauptdatenbank wird eine Verbindung zu ihr herstellen. Hier ist ein Beispiel für zwei mögliche Verbindungsansätze, und ich hoffte auf etwas Input, der effizienter wäre?Welcher DB-Junction-Ansatz ist in diesem Szenario effizienter?

Der Einfachheit halber können wir sagen, dass es zwei Tabellen gibt, Order und Invoice (und jede Rechnung hat nur 1 Bestellung).

Für eine Verbindung dieser Tabellen mit dem Papierkorb war ich unsicher, welchen Ansatz zu nehmen.

Ansatz 1:

DeletedOrder 
------------ 
DeletedOrderId 
OrderId 
RecycleBinId 
Date 
Reason 

DeletedInvoice 
-------------- 
DeletedInvoiceId 
InvoiceId 
RecycleBinId 
Date 
Reason 

Ansatz 2:

DeletedRecords 
-------------- 
DeletedRecordsId 
RecordPrimaryKeyId 
RecycleBinId 
RecordType 
Date 
Reason 

Obwohl Ansatz 1 wird mehr Tabellenplatz in der Datenbank übernimmt, wird es weniger Zeilen pro Tabelle und hat schnelle Abfragezeiten wie die System reift. Approach 2 konsolidiert, eine extra gelöschte Tabelle für jede Tabelle in der Datenbank erstellen zu müssen, aber wenn das System reift, wird es größer und wird langsamer abgefragt.

Welche wird insgesamt effizienter sein, oder gibt es eine bessere Möglichkeit, dies zu erreichen?

Antwort

1

Es hängt davon ab, wie viel Sie behalten müssen und wie Sie es verwenden werden. Wenn Sie alle Details Ihrer Rechnungen und Bestellungen (NumberOfStuffOrdered, Tax, etc.) erfassen müssen, sind die spezifischen Lösch-Tabellen notwendig. Wenn Sie lediglich die Tatsache notieren müssen, dass die Zeile einmal existierte (was Sie jetzt haben: ID, Typ, Datum [Gelöscht], Grund), kehren wir zurück zu "Es kommt darauf an".

Wenn niemand wirklich die Daten verwenden wird, wenn Sie nur die Tatsache brauchen, dass es auf die Chance eines IRS-Audit eines Tages existierte, dann sollte eine einzige Tabelle angemessen sein. (Die Analogie ist das Lagerhaus, gefüllt mit Kisten voller Formulare, die 70 Jahre zurückliegen - es wird Zeit brauchen, aber Sie werden es irgendwann finden.) Wenn Sie jedoch regelmäßig auf diese Daten zugreifen und Berichte erstellen, sollten Sie Data Mining betreiben oder was auch immer, dann ist es am besten, Tabellen zu entwerfen, um diese prozessnormierten Sternschemata zu unterstützen, oder was auch immer nützlich ist.

Im Allgemeinen vermute ich, dass eine große Tabelle mit ein paar Indizes, die häufige Abfragen unterstützen, ausreichen sollte, es sei denn, gute Leistung ist entscheidend.

+0

Vielen Dank für Ihre Antwort. Gute Leistung ist immer entscheidend! ;) Meistens möchte ich die Daten behalten, um sicherzustellen, dass die referenzielle Integrität beibehalten wird, ohne dass Fremdschlüsselbeziehungen oder Kaskadenlöschung entfernt werden müssen, wenn ein Datensatz entfernt werden muss. Dies wird auch die Möglichkeit erleichtern, entfernte Datensätze wiederherzustellen, ohne Leistungseinbußen hinnehmen zu müssen. Der Papierkorb wird eine Kaskadenlöschfunktion haben, die sparsam verwendet wird. –