# Datenbank MySQL und Java



## Sonnenblume123 (25. Apr 2019)

Hallo,

ich hätte eine Frage bezüglich MySQL und Java. Ich habe Java mit meiner MySQL Datenbank verbunden. Nun arbeite ich aber mit mehreren Leuten an dem Projekt und möchte nun wissen, ob die auch Zugriff auf die Datenbank haben (sie sollten Zugriff darauf haben, falls nicht).


----------



## kneitzel (25. Apr 2019)

Also normalerweise hat jeder Entwickler seinen eigenen Arbeitsplatz mit eigener oder eigenen Datenbank(en).

Zum Code gehört also auch, dass man eine Datenbank neu aufsetzen oder von einer Schemaversion zu einer anderen upgraden kann.


----------



## Sonnenblume123 (25. Apr 2019)

Das heißt wenn ich meinen Kollegen den Code gebe, so wird bei Ihnen die Datenbank nicht existieren. Außer sie würden sie selbst erstellen?


----------



## kneitzel (25. Apr 2019)

Ja, das sollten die Kollegen dann auch machen. Das gehört zu einer Lösung doch dazu. Wenn die Lösung von irgend jemandem später eingesetzt werden soll, muss er doch auch eine entsprechende Datenbank anlegen. Das ist somit also kein unnötiger Ballast sondern ein existenzieller Teil der Entwicklung.


----------



## Sonnenblume123 (25. Apr 2019)

Problem ist eben, dass das später dem Kunden ausgeliefert werden soll und dieser sollte nicht immer die Datenbank neu erstellen müssen.
Wäre also sinnvoll, wenn ich die Datenbank exportiere und als Datei speichere oder?


----------



## mihe7 (25. Apr 2019)

Schau Dir mal https://flywaydb.org/ an, könnte geeignet sein, je nachdem was Du vorhast.


----------



## Thallius (25. Apr 2019)

kneitzel hat gesagt.:


> Also normalerweise hat jeder Entwickler seinen eigenen Arbeitsplatz mit eigener oder eigenen Datenbank(en).
> 
> Zum Code gehört also auch, dass man eine Datenbank neu aufsetzen oder von einer Schemaversion zu einer anderen upgraden kann.



Das kommt drauf an ob jeder Client seine eigene Datenbank quasi nur als „SpeicherModul“ benutzt oder ob es sich um eine richtige Dtenbankanwendung handelt.  Normalerweise gibt es da irgendwo einen Datenbankserver mit einer Dev, Stage und Prod Datenbank (oder sogar 3 Server, für jede Stage einen). Diese benutzt die Applikation dann.
Und Code der die DB erstellt hat da so gar nichts in dieser Applikation zu suchen. Gute Applikationen haben normalerweise nicht einmal die Rechte Tabellen zu erstellen oder zu verändern, es sei denn das Konzept der Applikation läßt keine andere Lösung zu. Eine gute Datenbank ist immer unabhängig vom ihrer Applikation zu administrieren.

Gruß

Claus


----------



## kneitzel (25. Apr 2019)

Also generell sollte eine Applikation seine Datenbank aktualisieren können. Dazu versioniert man das Schema ebenfalls und hat dann idealerweise Changescripts, die eine Datenbank aktualisieren.

Ob die Applikation die Datenbank selbst aktualisiert (Das findet man bei viel Software für die Massen. Da gibt man dann eine Datenbankverbindung an und dann macht die Software alles selbst) oder ob das über eigene Methoden geht, ist dabei erst einmal egal.

Microsoft hat ein Databank Projekt entwickelt (Bestandteil der SQL Server Data Tools), welches Schema Abgleichs durchführen kann und dann automatische Change Scripts erstellt. Aber davon halte ich nicht sehr viel, denn man will oft deutlich mehr, also solche Tools bereit stellen.

Und natürlich muss ein Kunde eine Datenbank nicht ständig neu erzeugen. Das findet einmal statt (Oder wenn er mehrere Instanzen haben will, dann eben mit mehreren Instanzen) und danach wird die Datenbank gepflegt. Wie soll das auch anders gehen. Ich muss nur an gewisse Datenbanken im TB Bereich denken. Das lässt sich nicht mehr so ohne weiteres neu aufsetzen. 

Aber nicht desto trotz muss der Entwickler das natürlich aufsetzen können. Und das ist dann auch ein guter Test bei mehreren Entwicklern.

Bei meinen Scripts habe ich:
- Methoden für neue, leere Datenbanken
- Scripts für gewisse Testdaten
- Scripts für produktionsnahe Daten (Helfen beim nachstellen von Problemen).

Und wenn ich etwas brauche, dann ist das sehr schnell erledigt. Generell sind alle Daten in der Sourceverwaltung. Mein Rechner ist nebensächlich. Sprich: Ich habe auch mehrere Entwicklungssysteme: Windows/Linux und zwei Macs. Und wo ich gerade entwickeln will, da reicht ein Abrufen der letzten Version und ich kann loslegen.

Derzeit arbeite ich mit Cuba Studio/Platform, was ich recht interessant finde. Hat auch einige Probleme wie ich meine, aber das ist jetzt nur ein Beispiel: Da werden auch alle Dinge in SQL Scripten angelegt. Man hat mehrere create scripte und dann ganz viele update scripte. Und man kann dann konfigurieren, ob die Updates automatisch eingespielt werden sollen oder manuell. Kann ganz gut sein, wenn man dann einfach eine neue Version deployed und der Rest geht automatisch.

Also Wege gibt es viele und ich würde empfehlen, mit einfachen Create Scripten anzufangen. Und dann Change-Scrite zu pflegen. Die kann man dann am Anfang manuell ausführen. So haben wir auf Arbeit angefangen, ehe wir unseren eigenen DatabaseLoader geschrieben haben.


----------



## mrBrown (25. Apr 2019)

Thallius hat gesagt.:


> Das kommt drauf an ob jeder Client seine eigene Datenbank quasi nur als „SpeicherModul“ benutzt oder ob es sich um eine richtige Dtenbankanwendung handelt.  Normalerweise gibt es da irgendwo einen Datenbankserver mit einer Dev, Stage und Prod Datenbank (oder sogar 3 Server, für jede Stage einen). Diese benutzt die Applikation dann.
> Und Code der die DB erstellt hat da so gar nichts in dieser Applikation zu suchen. Gute Applikationen haben normalerweise nicht einmal die Rechte Tabellen zu erstellen oder zu verändern, es sei denn das Konzept der Applikation läßt keine andere Lösung zu. Eine gute Datenbank ist immer unabhängig vom ihrer Applikation zu administrieren.


Zu guten Datenbanken gehört auch, das die Administration (erstellen, updaten, etc) automatisiert ist, und damit natürlich als Code vorliegen muss. Ob die Anwendung später im Live-Betrieb die Datenbank verändern kann, ist erstmal völlig unabhängig davon.



mihe7 hat gesagt.:


> Schau Dir mal https://flywaydb.org/ an, könnte geeignet sein, je nachdem was Du vorhast.


Oder als Alternative https://www.liquibase.org, gefällt mir persönlich besser


----------

