Welche Datenbank für mein Projekt?

forelle

Grünschnabel
Hallo,
ich habe vor eine Anwendung in C++ (Windows 10) zu schreiben, die eine Datenbank benötigt. Die Datenbank wird etwa 80 Tabellen enthalten. Es soll ein Datenbanksystem und keine Lib wie SQLite sein. Ich habe schon etwas gelesen und schwanke noch zwischen MySQL und PostgreSQL. Meine bisherige Erkenntnis ist, dass MySQL weiter verbreitet, jedoch nicht so professionell wie PostgreSQL ist?! Bei der Dokumentation und der Community wiederum ist MySQL im Vorteil. Bisher habe ich nur im Webbereich (PHP, MySQL) mit Datenbanken gearbeitet.
Hat jemand eine Empfehlung, vielleicht sogar eine andere DB?

Beste Grüße
forelle
 
Lösung
Das hört sich aber nach einem ordentlichen Aufwand an. Zusätzlich dürfte ein Nutzer, der sich damit nicht auskennt, so seine Probleme haben.
Ich habe ein bißchen über Firebird gelesen. Das hört sich sehr interessant an, auch aufgrund der Lizenz.
Welches wäre denn die professionellste (kostenlose), leistungsfähigste, sicherste, stabilste Lösung? PostgreSQL, MySQL oder ein anderes System?
Stell die Frage an 10 Programmierer, und du wirst 40 Antworten bekommen......
Unter allen genannten Voraussetzungen: Würde auf PostGres tippen.
Was man sonst noch berücksichtigen sollte bei MySQL: MySQL ist ja, wie schon festgestellt, sehr verbreitet, und zwar nicht nur im Web-Bereich.
Niemals den MySQL-Server mit deiner Anwendung...
Firebird?
Ansonsten: Stick with that you know.
Wenn du schon Erfahrung mit MySQL hast, würde ich (zumindest am Anfang) dabei bleiben.
Was Portierung auf andere DB-Systeme betrifft: Mir hat ein "Profi"-Entwickler einen Trick verraten:
Benutze eine eigene Tabelle in der DB für deine SQL-Anweisungen (Alle! SELECT, INSERT, UPDATE etc.).
Ist eine simple Tabelle: ID, SQLStatement (zzgl. Optional: Dialect oder DB)
Beispiel-Eintrag:
123456 - "SELECT Vorname, Nachname FROM Kunden WHERE Nachname = @Nachname", "MySQL"

Aus deinem Frontend machst du dann ein simples "SELECT SQLStatement FROM tbl_Statements WHERE ID=123456", setzt den Parameter, und in einem zweiten Aufruf dann Feuer frei.
Vorteil: Migrierst du das Ding auf eine andere Datenbank, musst du nur die SQL-Statements in dem Dialekt in die Tabelle einfügen (oder du hast sie schon im Vorfeld drin, dann kannst du nach DB filtern), und nix im Quellcode deines Frontends.
Dasselbe gilt für das Erzeugen von Stored Procedures, Views, Triggers etc.
Wäre zumindest meine Vorgehensweise.

P.S.: Vergiss die Lizenzierung(en) der Datenbanken nicht, falls du eine kommerzielle Anwendung schreibst.
 
Wenn du schon Erfahrung mit MySQL hast, würde ich (zumindest am Anfang) dabei bleiben.
Ich würde ungern im weiteren Verlauf der Entwicklung auf ein anderes DB-System migrieren. Wieso benennst du diesen Punkt? Stößt man mit MySQL schnell an Grenzen? Es wird keine hochkomplexe Anwendung. Bzgl. der kommerziellen Nutzung wäre ich mit PostgreSQL auf der sicheren Seite.
Code:
Q: How is PostgreSQL licenced? How much does it cost?
A: PostgreSQL is released under the OSI-approved PostgreSQL Licence. There is no fee, even for use in commercial software products. Please see the PostgreSQL Licence.

Nach Firebird werde ich mal im Netz suchen. Wäre das denn ein DB-System, dass deiner Erfahrung nach nur für den Anfang geeignet ist und auf welches DB-System würdest du nach der anfänglichen Phase wechseln?
 
Du hast mich missverstanden: Ich sage nicht dass du migrieren sollst!
Ich meinte eher: Sich die Option offen halten.
Wenn ich irgendwas DB-mässiges schreibe, dann fange ich immer mit SQLite an, verwende aber o.g. Verfahren.
Wenn es sich dann herausstellt: OK, Einzelplatz (SQLite) reicht nicht mehr, wir brauchen einen DB-Server, dann brauche ich nur noch die SQL-Statements in der DB selbst, und muss am Code nix mehr ändern. Dann ist es egal, welchen DB-Server ich benutze, solange ich seinen SQL-Dialekt kenne.
Setzt natürlich klar voraus, dass man keine DB-Server-spezifischen Sachen braucht.

Firebird habe ich nur der Vollständigkeit halber genannt.
Persönlich habe ich noch nichts mit gemacht, hat aber anscheinend ne gute Community.
Firebird ist beides: Einzelplatz (Dateibasiert wie SQLite), und Server.
 
Ist es eigentlich möglich mit SQLite nachträglich Datenbankänderungen vorzunehmen? Ich meine, wenn ich mein Programm bereits ausgeliefert habe und Änderungen vornehmen möchte, sei es ein neues Modul oder einfach einige Felder einer Tabelle hinzufügen möchte? Ich habe gelesen, dass es nicht möglich sein soll.
 
Doch, ist möglich, aber SQLite ist da zickig, sofern Constraints (Fremdschlüssel etc.) auf der Tabelle sind.
zum änden:
tabellen-daten sichern
constraints aufheben
ändern (SQLite dropped die tabelle - bin mir jetzt nicht sicher ob mit oder ohne Daten-Erhalt)
constraints wieder rein
(re-import)
 
Doch, ist möglich, aber SQLite ist da zickig, sofern Constraints (Fremdschlüssel etc.) auf der Tabelle sind.
zum änden:
tabellen-daten sichern
constraints aufheben
ändern (SQLite dropped die tabelle - bin mir jetzt nicht sicher ob mit oder ohne Daten-Erhalt)
constraints wieder rein
(re-import)
Das hört sich aber nach einem ordentlichen Aufwand an. Zusätzlich dürfte ein Nutzer, der sich damit nicht auskennt, so seine Probleme haben.
Ich habe ein bißchen über Firebird gelesen. Das hört sich sehr interessant an, auch aufgrund der Lizenz.
Welches wäre denn die professionellste (kostenlose), leistungsfähigste, sicherste, stabilste Lösung? PostgreSQL, MySQL oder ein anderes System?
 
Das hört sich aber nach einem ordentlichen Aufwand an. Zusätzlich dürfte ein Nutzer, der sich damit nicht auskennt, so seine Probleme haben.
Ich habe ein bißchen über Firebird gelesen. Das hört sich sehr interessant an, auch aufgrund der Lizenz.
Welches wäre denn die professionellste (kostenlose), leistungsfähigste, sicherste, stabilste Lösung? PostgreSQL, MySQL oder ein anderes System?
Stell die Frage an 10 Programmierer, und du wirst 40 Antworten bekommen......
Unter allen genannten Voraussetzungen: Würde auf PostGres tippen.
Was man sonst noch berücksichtigen sollte bei MySQL: MySQL ist ja, wie schon festgestellt, sehr verbreitet, und zwar nicht nur im Web-Bereich.
Niemals den MySQL-Server mit deiner Anwendung mitliefern/installieren!
Du hast deine Anwendung auf MySQL80 geschrieben, der Endanwender hat seine Finanz-Software auf MySQL57, installiert deine Anwendung (inkl. MySQL80 ohne es zu merken) und wird sich dann bei dir bedanken, dass du ihm seine Finanz-Daten zerlegt hast!
 
Zuletzt bearbeitet:
Lösung
Zurück