Ist es überhaupt möglich?
Mein Anwendungsfall ist eine Hauptbuch-Tabelle mit der Anforderung, dass ein einmal erstellter Datensatz schreibgeschützt sein muss, dh, dass niemand in der Lage sein darf, ihn zu bearbeiten oder zu löschen. Dies gilt nur für die Hauptbuch-Tabelle und die Tabellen mit direktem Bezug. Es gibt andere Tabellen im selben Schema, die wie gewohnt aktualisiert / gelöscht werden.
Ich verstehe, dass aus Gründen der Datenintegrität diese Art von Einschränkungen auf die Datenbankebene angewendet werden sollten, aber ich kann keine saubere, allgemein akzeptierte Methode dafür finden - ist dies ein Anwendungsfall, bei dem ich es einfach besser machen würde in der Anwendungsschicht?
Das Ideal wäre eine Möglichkeit, dies in einfachem SQL zu tun, um unabhängig davon zu sein, welche DB-Plattform verwendet wird, da dies möglicherweise geändert werden kann, aber mir ist klar, dass dies zu viel verlangt werden kann, wenn dies der Fall ist Um plattformabhängig zu sein, wird eine Variante von MySQL bevorzugt.
Vielen Dank!
quelle
Berechtigungen scheinen die naheliegende Wahl zu sein - Sie können jedoch auch die ARCHIVE Storage Engine verwenden . Diese Tabellen-Engine zeichnet große Datenmengen auf, die sich nicht ändern:
Der Unterschied zu Berechtigungen besteht darin, dass ein Benutzer mit erweiterten Berechtigungen weiterhin Daten für die meisten anderen Tabellentypen ändern kann, während ARCHIVE es niemandem erlaubt, Daten zu ändern, die sich bereits in der Tabelle befinden.
quelle
REPLACE
eine Art zu seinUPDATE
! "REPLACE funktioniert genauso wie INSERT, außer dass, wenn eine alte Zeile in der Tabelle den gleichen Wert wie eine neue Zeile für einen PRIMARY KEY oder einen UNIQUE - Index hat, die alte Zeile gelöscht wird, bevor die neue Zeile eingefügt wird. Siehe Abschnitt 13.2.5 , "INSERT Syntax". "Sehen Sie sich " Point in Time Architecture " oder " Temporal Database Architecture " an.
Datenbankdesign: Ein Zeitpunkt in der Architektur
Zeitliche Datenbank
Die Grundidee von beiden ist, dass Sie entweder Daten hinzufügen müssen, ohne sie zu löschen, oder Daten so speichern müssen, dass Sie die Daten abrufen können, wie sie aktuell existieren ... oder zu einem früheren Zeitpunkt existierten.
damit verbundene Frage hier: How-to-create-a-Point-in-Time-Architektur-in-mysql ,
quelle