2012-03-28 13 views
0

Ich habe eine bestehende Anwendung (mit MySQL DB).MySql Soft löschen

Ich habe gerade eine neue Anforderung, wo ich einige Datensätze aus einer der Haupteinheit löschen muss. Ich möchte hier nicht hartes Löschen anwenden, da es für die ganze Anwendung riskant ist. Wenn ich soft delete benutze, muss ich ein weiteres Feld is_deleted hinzufügen und deswegen muss ich alle meine Abfragen aktualisieren (zB wo is_deleted = '0').

Bitte lassen Sie mich wissen, wenn es eine klügere Möglichkeit gibt, mit dieser Situation umzugehen. Ich muss Änderungen in der Hälfte der Abfragen vornehmen, wenn ich ein neues Flag für Löschvorgänge einführe.

+1

gibt es keine andere Art und Weise - entweder eine neue Flagge und/oder Sie können eine bestehende Flagge erweitern ... – Yahia

+0

Ja, wie pro Ihre Anforderung Flagge ist die beste Wahl, othervise Sie einen Auszug aus Ihrem Tisch nehmen in Temporäre Tabelle und done löschen zum Überprüfen. –

+0

Hängt davon ab, was Sie mit Softdelete meinen und welche Risiken für die Anwendung bestehen. Sie könnten eine neue Tabelle für "gelöschte" Einträge erstellen und "soft-deleted" verschieben. – liquorvicar

Antwort

5

Ihre Anwendung kann ohne Änderungen ausgeführt werden. MySQL ist ANSI-SPARC Architecture konform. Mit externem Schema erreichen Sie codd's rule 9 "Logical data independence":

Änderungen an der logischen Ebene (Tabellen, Spalten, Zeilen und usw.) müssen nicht eine Änderung an einen auf der Struktur-basierten Anwendung erfordern. Logische Daten Unabhängigkeit ist schwieriger zu erreichen als physikalische Daten Unabhängigkeit.

Sie können rename Ihre Tabellen erstellen und Ansichten mit ursprünglichen Tabellennamen erstellen. Ein Beispiel:

Lassen Sie uns einen Tisch my_data namens nehme an:

REMAME TABLE my_data TO my_data_flagged 

ALTER TABLE my_data_flagged 
    ADD COLUMN is_deleted boolean NOT NULL default 0; 

CREATE VIEW my_data AS 
    SELECT * 
    FROM my_data_flagged 
    WHERE is_deleted = '0' 

Eine andere Möglichkeit ist es, einen Trigger erstellen und eine Kopie der gelöschten Zeilen in unabhängigen Tabelle machen.

4

Vier Vorschläge:

  1. Statt ein wenig mit is_deleted genannt, eine Datums- und Uhrzeit verwendet genannt etwas wie deleted_Date ... diesen Wert NULL sein, wenn es noch aktiv ist, und seine ein Zeitstempel für die Löschung Datum sonst. Auf diese Weise wissen Sie auch , wenn ein bestimmter Datensatz gelöscht wurde.

  2. Anstatt die Hälfte Ihrer Abfragen zu aktualisieren, um gelöschte Datensätze auszuschließen, erstellen Sie eine Ansicht, die diese Filterung durchführt, und aktualisieren Sie dann Ihre Abfragen, um diese Ansicht zu verwenden, anstatt die Filterung überall anzuwenden.

  3. Wenn die gelöschten gelöschten Datensätze an einer Beziehung beteiligt sind, müssen Sie möglicherweise Auslöser erstellen, um sicherzustellen, dass aktive Datensätze kein übergeordnetes Element aufweisen können, das als gelöscht gekennzeichnet ist.

  4. Denken Sie vorausschauend daran, wie Sie diese gelöschten Datensätze endgültig löschen möchten, und stellen Sie sicher, dass Sie über die entsprechenden Integritätsprüfungen verfügen, bevor Sie die Festplatte löschen.