Ich glaube nicht, dass ich die einzige Person bin, die sich darüber wundert. Was üben Sie normalerweise über das Datenbankverhalten? Möchten Sie einen Datensatz lieber physisch aus der Datenbank löschen? Oder ist es besser, den Datensatz nur mit einem "gelöschten" Flag oder einer booleschen Spalte zu kennzeichnen, um anzuzeigen, dass der Datensatz aktiv oder inaktiv ist?
database
database-design
jerbersoft
quelle
quelle
Antworten:
Dies hängt definitiv vom tatsächlichen Inhalt Ihrer Datenbank ab. Wenn Sie es zum Speichern von Sitzungsinformationen verwenden, löschen Sie es auf jeden Fall sofort, wenn die Sitzung abläuft (oder geschlossen ist), und Sie möchten nicht, dass dieser Müll herumliegt. Da es für praktische Zwecke nicht wirklich wieder verwendet werden kann.
Grundsätzlich müssen Sie sich fragen, ob ich diese Informationen wiederherstellen muss. Wie gelöschte Fragen zu SO sollten sie auf jeden Fall nur als "gelöscht" markiert werden, da wir aktiv ein Wiederherstellen zulassen. Wir haben auch die Möglichkeit, es anzuzeigen, um auch Benutzer auszuwählen, ohne viel zusätzlichen Aufwand.
Wenn Sie nicht aktiv versuchen, die Daten vollständig wiederherzustellen, Sie sie aber dennoch zu Überwachungszwecken (oder ähnlichen Zwecken) aufbewahren möchten. Ich würde vorschlagen, dass Sie (natürlich so weit wie möglich) ein Aggregationsschema herausfinden und dieses auf eine andere Tabelle verschieben. Auf diese Weise wird Ihre Primärtabelle von "gelöschten" Daten befreit und Ihre Sekundärtabelle für Überwachungszwecke (oder was auch immer Sie sich vorgestellt haben) optimiert.
Zeitliche Daten finden Sie unter: http://talentedmonkeys.wordpress.com/2010/05/15/temporal-data-in-a-relational-database/
quelle
Vorteile der Verwendung eines Löschflags:
Nachteile der Verwendung eines Löschflags:
AND DeletedFlag = 'N'
irgendwo in Ihrem SQL zu übersehenquelle
Als Ergänzung zu allen Beiträgen ...
Wenn Sie jedoch vorhaben, den Datensatz zu markieren, sollten Sie eine Ansicht für aktive Datensätze erstellen. Dies würde Sie davor bewahren, das Flag in Ihrer SQL-Abfrage zu schreiben oder zu vergessen. Sie können auch eine Ansicht für nicht aktive Datensätze in Betracht ziehen, wenn Sie der Meinung sind, dass dies auch einen Zweck erfüllt.
quelle
Ich bin froh, diesen Thread gefunden zu haben. Auch ich habe mich gefragt, was die Leute über dieses Thema denken. Ich habe das "als gelöscht markiert" seit ungefähr 15 Jahren auf vielen Systemen implementiert. Wann immer ein Benutzer anrief, um zu sagen, dass etwas versehentlich gelöscht wurde, war es sicherlich viel einfacher, es als nicht gelöscht zu markieren, als es neu zu erstellen oder aus einem Backup wiederherzustellen.
Wir verwenden postgresql und Ruby auf Schienen. Es sieht so aus, als könnten wir dies auf zwei Arten tun, Schienen ändern oder einen Ondelete-Trigger hinzufügen und stattdessen eine pl / pgsql-Funktion ausführen, um sie als gelöscht zu markieren. Ich neige mich zu Letzterem.
In Bezug auf Leistungstreffer wird es interessant sein, die Ergebnisse von EXPLAIN-ANALYZE auf großen Tabellen für wenige gelöschte Elemente sowie viele gelöschte Elemente zu sehen.
In Systemen, die im Laufe der Zeit verwendet wurden, neigen neue Benutzer dazu, alberne Dinge wie das versehentliche Löschen von Dingen zu tun. Wenn Personen in einer Position neu sind, haben sie alle Zugriffsrechte der Person, die zuvor in dieser Position war, außer ohne Erfahrung. Wenn Sie versehentlich etwas löschen und sich schnell erholen können, können alle schnell wieder arbeiten.
Aber wie jemand sagte, manchmal benötigen Sie diesen bestimmten Schlüssel aus irgendeinem Grund zurück. An diesem Punkt müssten Sie ihn wirklich löschen und dann die Datensätze neu erstellen (beim Wiederherstellen und Ändern des Datensatzes).
quelle
Es gibt auch rechtliche Probleme, wenn es um personenbezogene Daten geht. Ich denke, es hängt stark davon ab, wo Sie sich befinden (oder wo sich die Datenbank befindet) und wie die Nutzungsbedingungen lauten.
In einigen Fällen können Benutzer darum bitten, von Ihrem System entfernt zu werden. In diesem Fall ist ein hartes Löschen erforderlich (oder zumindest das Löschen aller persönlichen Informationen).
Ich würde mich bei Ihrer Rechtsabteilung erkundigen, bevor Sie eine Strategie festlegen, wenn es um personenbezogene Daten geht.
quelle
Ich markiere sie als gelöscht und lösche sie nicht wirklich. Ab und zu fege ich jedoch den gesamten Müll heraus und archiviere ihn, damit die Leistung nicht beeinträchtigt wird.
quelle
Wenn Sie Bedenken haben, dass "ruhende" Datensätze Ihren Datenbankzugriff verlangsamen, möchten Sie diese Zeilen möglicherweise in eine andere Tabelle verschieben, die als "Archiv" -Tabelle fungiert.
quelle
Für vom Benutzer eingegebene / verwaltete Daten habe ich die von Ihnen beschriebene Flag-Methode verwendet und dem Benutzer eine Schnittstelle zum Löschen des Papierkorbs gegeben, um Elemente tatsächlich zu löschen, wenn er dies wünscht.
quelle