MySQL Datenbankstruktur angleichen - Daten behalten

ITrun90

Mitglied
Hi,

ich beschreibe kurz die IST-Situation.

Ich habe zwei Datenbanken zu einem Projekt. Einmal eine Testdatenbank und einmal eine Livedatenbank. Zu erst wird auf der Testdatenbank entwickelt. Sofern alles fertig ist, und mit Testdaten getestet wurde, kann die Struktur auf das Livesystem übernommen werden.

Dies soll auch öfter wiederholt werden. Die Daten, die auf dem Livesystem liegen sollen dabei natürlich nur soweit gelöscht/geändert werden, wie es auf Grund der neuen Struktur sinnvoll ist (neue Spalten mit NULL-Werten füllen, gelöschte Spalten einfach löschen, ist die Spalte, die gelöscht/hinzugefügt werden soll ein FK, soll dementsprechend ein Eintrag hinzugefügt/entfernt werden).

Das Ganze soll mit Java erfolgen (ich habe dafür schon ein JavaFX-Projekt angelegt).

Habt ihr da einen Tipp für mich, ob es ggfs. eine Bibliothek gibt (DBUnit vielleicht)?

Im Grunde möchte ich eine einseitige Synchronisation der Datenbankstruktur, die zugleich die Daten soeweit möglich auf dem Livesystem erhält.
 
Mein Vorschlag: JPA (java persistence api)
Ist nicht so einfach zu verstehen wie man es nutzt, aber wenn man es erst einmal verstanden hat, ist es doch recht leicht. Ich würde zum lernen diverse Internetseiten nutzen und selbst herumexperimentieren. Außerdem kann ich dir empfehlen netbeans zu nutzten, aber nur weil netbeans dir einiges hilfreiches, was du sonst selber schreiben müsstest, generieren kann.
 
Ich verstehe die Problematik nicht so ganz. Das man Spalten oder gar ganze Tabellen löscht kommt eigentlich niemals vor. Das macht auch keinen Sinn. Wenn ich eine Spalte hinzufüge, dann mache ich das per Code. Also einfach ein query ob es die Spalte schon gibt und wenn nicht, dann wird sie angelegt. Damit habe ich auf dem Live Server nach dem ersten Start gleich immer das gleiche DB Schema wie auf dem Test Server

Gruß

Claus
 
Und das mit dem ändern der Spalten:
Wie willst du dir das vorstellen einfach so per Code eine Spalte zu löschen und hinzuzufügen?
Denn eigentlich speichert man einen Datensatz in einer OOP (Java) in einem Objekt mit entsprechenden Attributen ab. Dies nennt man dann Entity. Wenn du jetzt in deiner GUI eine Splate zur Datenbank hinzufügst oder eine löschst musst du dementsprechend auch die Attribute der Entityklasse anpassen.......
 
Wenn entsprechend oft Änderungen an der Datenstruktur getätigt werden ist evtl. der Ansatz falsch.
Evtl. wäre eine NoSQL Datenbank ohne festes Schema sinnvoller.
 
Mein Vorschlag: JPA (java persistence api)

JPA ist für Objekt-Relationales Mapping. Ist zwar schön, aber die Antwort geht an der Frage vorbei. Natürlich kannst du dir mit JPA dein Datenbank Schema neu erzeugen lassen, aber das löst nicht das Problem der Datenmigration und hier ist JPA der falsche Ansatz.

Wenn entsprechend oft Änderungen an der Datenstruktur getätigt werden ist evtl. der Ansatz falsch.
Evtl. wäre eine NoSQL Datenbank ohne festes Schema sinnvoller.

Würde ich nicht sagen. Nach meiner Erfahrung ist es das normalste der Welt, dass Anforderungen an eine Software sich ständig ändern. Speziell bei individueller Software ... und das ist wohl auchgenau das, womit die meisten von uns ihr Geld verdienen. Einsatz einer NoSQL Datenbank kann hier sinnvoll sein, in den meisten Fällen löst es aber nicht das zugrunde liegende "Problem".

Ich verstehe die Problematik nicht so ganz. Das man Spalten oder gar ganze Tabellen löscht kommt eigentlich niemals vor. Das macht auch keinen Sinn. Wenn ich eine Spalte hinzufüge, dann mache ich das per Code. Also einfach ein query ob es die Spalte schon gibt und wenn nicht, dann wird sie angelegt. Damit habe ich auf dem Live Server nach dem ersten Start gleich immer das gleiche DB Schema wie auf dem Test Server

Bei kleinen Änderungen mag das ausreichen, aber wenn sich die Struktur doch entscheidend verändert, und auch Daten "migriert" werden müssen, dann reicht das nicht mehr aus.


Zurück zur Frage:
Lies dir mal folgende Beiträge durch:
http://stackoverflow.com/questions/...control-system-for-database-structure-changes
https://blog.codinghorror.com/get-your-database-under-version-control/
 
Bei kleinen Änderungen mag das ausreichen, aber wenn sich die Struktur doch entscheidend verändert, und auch Daten "migriert" werden müssen, dann reicht das nicht mehr aus.

Also bei einem bereits Live arbeitenden System würde ich eine derart große Änderung an einer Entität einfach nicht vornehmen. In dem Fall würde ich eine neue Entität erstellen und eine Migratinsmethode schreiben.

Gruß

Claus
 

Neue Themen


Zurück
Oben