MySQL Historie für ein Objekt anlegen

pengwolf

Mitglied
Hi,

Es geht um die Historie bei einer Veraltung von Exponaten in einer Datenbank. Wir haben mehrere Tabellen, die mit einbezogen werden müssen.

Exponat = (id: Key, name, beschreibung, sektions_id, kategorie_id)
Sektion = (id: key, name, beschreibung, parent_id, museum_id)
Categorie = (id: Key, name)
Bild = (id: Key, name, file:Blob)
Ausgeliehen = (id: Key, exponat_id, ausstellung_id)
Ausstellung = (id: Key, addresse_id, name, beschreibung)

(Erstmal die Wichtigsten)

Nun soll es möglich sein, dass man in einer Historie nachsehen kann was mit diesem Exponat passiert ist. Also wann wurde der Name geändert. Wie lange war das Exponat in einer bestimmten Ausstellung und so weiter. Es muss nicht gespeichert werden, wer es geändert hat, da es atm ein Single-User-Programm ist. Wir haben schon verschiedene Herangehensweisen versucht. So haben wir uns z.B. am Anfang überlegt, dass man die Historie so anlegt:

Historie = (id: Key, exponat_id, date, sektion, ausstellung)

So könnte man speichern, wann das Exponat wo war. Also Ausstellung, oder Sektion. Und wenn es wechselt, dann trägt man neu ein.

Dann kam die Anforderung, dass man auch Namen und Beschreibung etc. auslesen muss. Da kamen wir auf die Idee eine History-Tabelle anzulegen, wo der ganze Tupel getriggert wird. Sodass man mit dem dazugehörigen Datum immer nachvollziehen kann, wie das Exponat aussah. Das ist aber bei häufigen Änderungen sehr schnell sehr Speicherlastig, weil ja die Exponate mehrmals gespeichert werden.

Nun hatten wir überlegt, ob man nicht immer nur die Änderungen in der History-Tabelle hinterlegt und die anderen Felder null setzt.

Also würden für unsere Exponate die Historie im Moment so aussehen:

Ausgeliehen = (id: Key, exponat_id, ausstellung_id, ausgeliehen: Date, zurueck: Date)
Historie_Objekt = (id: key, date, exponat_id, name, beschreibung, sektion_id, kategorie_id)

Wir müssen aber auch angeben können, in welcher Sektion das Objekt war, wenn diese Sektion oder diese Kategorie schon gelöscht wurde. Weswegen wir überlegt hatten ein Feld mit "deleted: Date" in den betroffenen Tupeln zu erzeugen. So ist gewährleistet dass immer alle Daten vorhanden sind. Und wir dort auch mit dem eintragen des Datums in deleted nachvollziehen können, wann es gelöscht wurde.

Da ist uns ganz kurz noch die Idee gekommen das in einem Hardcodierten String zu speichern. Das haben wir aber ganz schnell wieder verworfen.

Würde mich freuen wenn ihr dazu ein paar Infos aus der Praxis hättet, wie man das elegant lösen könnte.

Schon einmal vielen Dank!
 

Bernd Hohmann

Top Contributor
Würde mich freuen wenn ihr dazu ein paar Infos aus der Praxis hättet, wie man das elegant lösen könnte.

Eine gute, revisionssichere Historie ist immer bisserl schmutzig und Eleganz ist meisstens fehl am Platz.

Besonders nervig wird es, wenn (wie in Deinem Fall) der Stammsatz über viele Joins zusammengebaut wird denn in diesem Fall muss dann auch von den relevanten Seitentabellen auch eine Historie gefüllt werden (zb. jemand benennt die Kategorie um und in 3 Jahren fragt einer "Wie hiess das früher?")

Ich würde mir (wie von euch auch schon angedacht) sämtliche relvanten Spalten herausschreiben, damit eine recht breite Tabelle mit "yymmddhhmmss, spalte, spalte ...." anlegen und bei jeder Änderung nur die geänderten Spalten wegschreiben (die anderen setzt man auf NULL womit das Problem mit der dicken Bilddatei wegfällt).

Bernd
 

OlliL

Bekanntes Mitglied
Wie oft wird geändert, und wie lange muss die Historie vorgehalten werden?
Eine Möglichkeit wäre auch die Verwendung von "gültig ab" und "gültig bis" Spalten, eine andere eine Journaltabelle je Entität welche mittels INSERT/UPDATE-Trigger auf der DB befüllt wird, oder durch Programmlogik (würde Trigger vorziehen zwecks revisionssicherer).
Problematisch könnte es dann nur werden mit der Darstellung der Daten. Je nach Darstellungsform stellt einen diese Herangehensweise vor Probleme.... (z.B. wenn man mit dem Exponat einsteigt und dann "über alles" eine Art Zeitstrahl bilden muss).
 

pengwolf

Mitglied
Wie lange die Historie angezeigt werden muss wissen wir nicht. Müssen wir nochmal mit unserem Tutor/Kunden klären.

Werde mir den Link dazu mal angucken. Danke
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Verknüpfung auflösen für Frontend Datenbankprogrammierung 7
R Beste Lösung für User Erstellung in mongodb Datenbankprogrammierung 1
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
O apache derby in eclipse für Datenbanken einbauen Datenbankprogrammierung 3
Zrebna Empfehlung für ein kostenloses DB-Hosting gesucht Datenbankprogrammierung 6
M Lösungsvorschläge für Multi-User Datenbankprogrammierung 1
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
Kirby.exe Denkanstoß für Ranking Datenbankprogrammierung 1
L Oracle Repräsentative Namen für die Column Types Datenbankprogrammierung 9
OnDemand Struktur für Parent / Child Produkt Datenbankprogrammierung 5
N ORM für Sqlite Datenbankprogrammierung 4
I Konzept: Klasse / Entity für Einstellung der Software Datenbankprogrammierung 3
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
ruutaiokwu MySQL MariaDB-Client-Zertifkate, nur für einen bestimmten User Datenbankprogrammierung 5
B Datenmodell für Regeln + Bedingungen & Referenz auf andere Tabelle Datenbankprogrammierung 12
O Dokumentation für MariaDB 10.3. Datenbankprogrammierung 2
F MariaDatabase Einstellungen für Verbindungen Datenbankprogrammierung 5
Dimax MySQL Trigger für eine Spalte Datenbankprogrammierung 5
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
B Brauche Tipps für Datenbankdesign Datenbankprogrammierung 8
B Tabelle für "wiederkehrende Rechnungen" Datenbankprogrammierung 12
Danloc Informationen für Datenbankverbindung wo/wie speichern? Datenbankprogrammierung 11
J Warum sind Sockets für einen Live-Chat sinnvoll? Datenbankprogrammierung 8
R Java-Befehle/Operatoren für copy&paste Datenbankprogrammierung 2
X PostgreSQL Datenbankdesign für Vokabeltrainer Datenbankprogrammierung 48
@SupressWarnings() HSQLDB Datenbank für mein Dorfbauspiel "Time of Kings" Datenbankprogrammierung 6
M Idee Umsetzung //NFC Eintrittskarten für Geburtstag Datenbankprogrammierung 2
looparda Architektur für JPA Hibernate Umstieg Datenbankprogrammierung 14
P Datanbank für Java-Programmierung Datenbankprogrammierung 10
M Feedback für neues Buch über "Java und Datenbanken" erwünscht Datenbankprogrammierung 8
J SQLite Ich muss für mein Projekt meine Datenbank Kapseln Datenbankprogrammierung 2
J Tipps für ERM Datenbankprogrammierung 4
P Highlevel-Lösung für Speicherung von Baumstruktur mit unbekannter Tiefe Datenbankprogrammierung 1
F welche Datenbank für Messwerte? Datenbankprogrammierung 4
E Warum werden für Datenbanktabellen Schemanamen festgelegt? Datenbankprogrammierung 1
M DB Schema für Vokabeltrainer Datenbankprogrammierung 2
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
E Kann man, wenn man in DB2 Tabellen erstellt hat für dessen auch einen Command-File erstellen? Datenbankprogrammierung 1
T NoSQL Connection für die Thesis [GWT] Datenbankprogrammierung 1
J SQLite Abfrage ausführen stoppt für Zyklus? Wie es zu lösen? Datenbankprogrammierung 3
S HSQLDB Fehlermeldung für den Bildschirm Datenbankprogrammierung 3
L Datenmodell erstellen für eine Nutzertanalyse Datenbankprogrammierung 1
I Query für Geburtstage Datenbankprogrammierung 6
L Zentrale Datenbank im Internet für Spiele Highscores? Datenbankprogrammierung 1
P Derby/JavaDB Csv Datei für dieses Musterprogramm Datenbankprogrammierung 12
ruutaiokwu code-formatter für t-sql... Datenbankprogrammierung 12
J Plug-In-Framework für Hibernate-Klassen Datenbankprogrammierung 0
T Mehrsprachigkeit für Tabellenfelder Datenbankprogrammierung 6
E MySQL Große Datenmengen reibungslos speichern für Gameserver Datenbankprogrammierung 6
F MSSql oder MongoDB für die Speicherung von POI Datenbankprogrammierung 9
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
P MySQL eine richtige Datenbank für einen routenplaner erstellen Datenbankprogrammierung 2
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J Datenbank für Fragen/ Antworten Datenbankprogrammierung 7
O Datenbankschnittstelle für Java Datenbankprogrammierung 8
L Datenbank für kleinere Anwendungen Datenbankprogrammierung 3
N Query für Derby DB mit Enterbrise Bean Datenbankprogrammierung 4
S ich brauche tipps für JDBC Datenbankprogrammierung 4
I Hibernate - Best Practice für Lazy Loading Datenbankprogrammierung 3
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
GianaSisters SQL Befehl für allgemeine Datenbankexistenz Datenbankprogrammierung 4
B Beispiel für sicheres DBUsername/DBPassword handling Datenbankprogrammierung 4
I Anfänger-Tutorial für Hibernate gesucht Datenbankprogrammierung 3
heart_disease Beratung für Datenbankdesign Datenbankprogrammierung 13
C Embedded DB für Java Datenbankprogrammierung 26
J Unterstützung für verschiedene Datenbanken Datenbankprogrammierung 2
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
F suche Erstanschub für DB-Zugriff Datenbankprogrammierung 9
F MySQL SQL Abfrage für u.a. Spaltenname key Datenbankprogrammierung 4
T ResultSet befehl für leere Spalte nicht lesen Datenbankprogrammierung 4
F Performance-Tool für Oracle Datenbankprogrammierung 2
T Kleine Tabellen für schnellere abfragen? Datenbankprogrammierung 3
C Split String für SQl query Datenbankprogrammierung 10
A update methode für datenbank Datenbankprogrammierung 2
N Datenbank für Dateien Datenbankprogrammierung 6
N Datenbank für einen Stundenplan Datenbankprogrammierung 4
G welche Datenbanktabellen für folgende Attribute Datenbankprogrammierung 3
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
S JPA (EntityManager für jeden Nutzer?) Datenbankprogrammierung 8
J Buffer Manager für Datenbank Datenbankprogrammierung 4
F SQL Voraussetzung für JDBC? Datenbankprogrammierung 10
R Bei Webformular DropDown Felder JA, NEIN! Was für einen Datentyp verwenden? Datenbankprogrammierung 7
T SSL Zertifikat für mysql datenbankzugriff Datenbankprogrammierung 6
T Debugger für SQL? Datenbankprogrammierung 5
Chtonian Effizientes Query System für Wortnachschlagewerk Datenbankprogrammierung 9
G Tabelle für Zeitraum sperren Datenbankprogrammierung 4
A Struct für Datenbank abfrage? Datenbankprogrammierung 12
O Hibernate für Eclipse Datenbankprogrammierung 5
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
D Sicherheit für Datenbankverbindung Datenbankprogrammierung 19
S Standard für Datenbanken Datenbankprogrammierung 3
R Entfernte MySQL Datenbank für lokale Swing-App Datenbankprogrammierung 8
Landei Mehre Werte für einen Prepared-Statement_Parameter übergeben? Datenbankprogrammierung 3
G Einheitliches Casting für Decimal und Integer-Werte Datenbankprogrammierung 5
G TippSpiel für Bundesliga programieren Datenbankprogrammierung 4
-horn- [Anfänger] Ein einfaches Beispiel für Abfrage von MxSQL? Datenbankprogrammierung 8
G persistence.xml für MySQL - Verbindung Datenbankprogrammierung 6
M Persistenz für kleines Projekt Datenbankprogrammierung 11

Ähnliche Java Themen

Neue Themen


Oben