Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Projektplanung und -Management (https://www.delphipraxis.net/85-projektplanung-und-management/)
-   -   Die richtige Datenbank- und Komponentenwahl (https://www.delphipraxis.net/182567-die-richtige-datenbank-und-komponentenwahl.html)

ByTheTime 1. Nov 2014 13:41

Die richtige Datenbank- und Komponentenwahl
 
Hallo,
ich habe vor ein älteres aber immer noch in Benutzung befindliches Programm mal auf den neusten Stand der Technik zu befördern 8-) Dazu hätte ich allerdings ein paar Fragen was die Datenbank- und Komponentenwahl angeht. Bevor ich darauf eingehe erstmal ein bisschen Text :lol:

Das Programm um was es sich handelt ist in Delphi 5 begonnen und dann immer von mir upgegraded und weiterentwickelt worden. Es ist eigentlich das erste "größere" Projekt was ich jemals in Angriff genommen habe und es, kurz nachdem ich Delphi gelernt habe, begonnen (Dementsprechend sieht auch die Source aus. Da ich immer mehr dazugelernt habe und sich mein Programmierstil entsprechend geändert hat, ist das wirklich kein schöner Anblick :roll:). Aber es funktioniert halt!
Es handelt sich um eine Protokoll-Software die im Moment von ca. 5-7 Leuten aus meinem Bekanntenkreis regelmäßig benutzt wird. Ich kenne allerdings noch einige Leute die das Programm gerne verwenden würden, allerdings scheitert es an einigen Punkten:
  • Nicht jeder hat einen Windows Rechner
  • Nicht jeder hat Excel (wird für den Excel Export benötigt, der eines der begehrtesten Features ist)
  • Nicht jeder hat die Zeit sich immer an den PC zu setzen und mit der Software zu arbeiten
  • Als "DB" kommt eine MyBase Tabelle zum Einsatz. Daher ist man auf einen Rechner beschränkt, ein Datenaustausch mit anderen Rechnern (z.B. PC Zuhause und Rechner auf der Arbeit) ist nicht möglich

Das Programm wollte ich daher mal komplett neu aufsetzen und um einige Features, eine schönere UI und sogar um eine Android App erweitern.

Jetzt habe ich dazu, wie angekündigt ein paar Fragen:
  1. Meine Erfahrung mit "richtigen" Datenbanken beträgt gleich Null. Ich habe vor einiger Zeit nur mal mit der guten, alten BDE gearbeitet 8-) Da ich ja eine Systemübergreifende App entwickeln möchte, in welcher die Daten der Benutzer praktisch "in der Cloud" sind, bietet sich ja eine Lösung mit einer DB auf einem zentralen Server an. Ich hätte da jetzt an MySQL oder MariaDB gedacht, für jeden Benutzer gibt es eine Tabelle mit dessen Daten die ich dann abrufen kann. Gibt es da Einwände, Probleme oder Vorschläge von eurer Seite? Und noch eine ganz wichtige Sache: Wie sieht es denn da mit den Lizenzen aus? Da ich das Projekt finanziell alleine trage und auch kein Geld für die Software verlange, würde ich ungern noch Lizenzen erwerben oder gar in eine Lizenzfalle treten.
  2. Da ich eine Android App entwickeln möchte, müsste ich sowieso mein Delphi upgraden. Das wird dann wahrscheinlich auf XE7 (oder eventuell XE8 hinauslaufen da auf der Roadmap ja WindowsRT gelistet ist). Da ist ja auch FireDAC dabei. Hat jemand schon Erfahrung mit FireDAC gesammelt und ist das für mein Vorhaben zu empfehlen? So wie ich das verstanden habe ist FireDAC eine plattformunabhängige Datenzugriffsbibliothek, das heißt ich spare mir den Weg über den MySQL ODBC-Treiber und DLL's wie die libmysql.dll :?: Oder habe ich da jetzt was durcheinander geworfen :gruebel:
  3. Noch einen letzten Punkt der mir schon die ganze Zeit nicht aus dem Kopf geht. Der ist zwar schon etwas weitreichend, aber vllt. kann ja jemand meinen Horizont erweitern :-D Wenn ich jetzt alle Daten auf einem Server ablege und der Benutzer hat mal keine Internetverbidung... Was ist den dann? Klar, er kommt nicht mehr an seine Daten, kann Sie weder abrufen, noch editieren. Aber wie kann ich solche Probleme den umgehen? Am liebsten wäre mir ja eine lokale DB die ich mit der MySQL-Tabelle synchronisiere, aber ist das nicht für den Anfang schon wieder viel zu kompliziert? Was git es noch für Lösungsansätze für solch ein Problem?

So... Ich hoffe ich konnte euch vermitteln was mir gerade so durch den Kopf geht und freue mich auf eure Antworten :-D

Gruß,
Lukas

jobo 1. Nov 2014 14:31

AW: Die richtige Datenbank- und Komponentenwahl
 
Wenn es mit Synchronisierung sein soll, dann vielleicht local sqlite überall, wird es wohl bei Android sowieso werden.
Als DB mySQL, MariaDB, Firebird, Postgres, .. by mySQL gibt es u.U. ein Lizen (Kostenproblem), in Deinem akuten Fall aber wohl auch nicht.
Zu aktuellen Delphiversionen und Firedac kann ich leider nichts sagen.
Was mich etwas stutzig gemacht hat waren die Worte "..jeder Nutzer seine Tabelle, auf die ich dann zugreife.."
Idr haben Nutzer keine eigenen Tabellen, sondern alle eine, die dann ggF. nach User im Zugriff gefiltert wird. Bedeutet für die Gesamtschau (Dich), Du brauchst wirklich nur auf eine Tabelle zu schauen und siehst alles. Aber überhaupt, nur eine Tabelle, Server, Synchronisation? Kanonen, Spatzen? Ich kann mir leider unter Protokoll-Software auch wenig Konkretes vorstellen. (Von "Wer steht wo beim Staatsbesuch?" über "Protokoll Schreiben" bis "Protokollanalyse" )
Excel: In Zeiten von OpenDocument Format sollte jeder auch System unabhängig auf seine Kosten kommen.
Insgesamt solltest Du vielleicht etwas Datenbankgrundlagen lernen, damit Du Dich in 6 Monaten nicht wieder über den Mist ärgerst, den Du damals verzapft hast. Wenn es wirklich nur eine Tabelle ist, aber vielleicht auch nicht so dramatisch.

ByTheTime 1. Nov 2014 15:22

AW: Die richtige Datenbank- und Komponentenwahl
 
Hallo,
um deine Vortellung um was es da geht nochmal ein bisschen auszudehnen: Es handelt sich um ein Programm um Trainingsfortschritte im Leistungssport nachzuvollziehen. Man hat praktisch eine GUI mit Feldern, in die Werte eingetragen werden. Über eine Liste lassen sich die verschiedenen Trainingseinheiten anwählen/editiern/löschen und neu erstellen. Je nach Eintrag wird dann mit FindKey der entsprechende Datensatz in der myBase DB gesucht. Nachteil ist neben den bereits genannten auch, das man z.B. nicht immer direkt nach dem Training zuhause ist und direkt alle Daten eintragen kann. Ein Handy App würde das Problem umgehen, dass man nach einiger Zeit sich nicht mehr genau an das Training erinnern kann. Die präzision der Werte ist allerings sehr wichtig.

Mit dem Satz "..jeder Nutzer seine Tabelle, auf die ich dann zugreife.." wahr im Sinne von "Ich" meine Anwendung gemeint :-D Aber ja, dein Vorschlag geht natürlich auch.

Aber du hast wohl Recht, mich erstmal mit SQL auseinanderzusetzen ist wohl der beste Ansatz für dieses Vorhaben.

Was mich auch noch interessiert sind die Tethering Komponenten. Somit könnte ich bei Fehlender Internetverbindung immer noch Daten zwischen mehreren Geräte in einem Netzwerk austauschen (mit die Geräte eines Users zumindestens alle synchron sind).

Sir Rufo 1. Nov 2014 18:01

AW: Die richtige Datenbank- und Komponentenwahl
 
Bei den Vorgaben würde ich zwangsweise immer auf einem Webserver speichern. REST-Schnittstelle anbieten und mit allen Anwendungen darauf zugreifen. Die Datenbank dahinter ist dann Nebensache und nach aussen hin völlig egal, weil es keine direkten Berührungspunkte gibt.

Lokal ein SQLite (läuft auf allen Plattformen, sonst wäre auch jedes andere lokale DB-System denkbar).

ByTheTime 2. Nov 2014 00:34

AW: Die richtige Datenbank- und Komponentenwahl
 
Zitat:

Zitat von Sir Rufo (Beitrag 1278357)
Bei den Vorgaben würde ich zwangsweise immer auf einem Webserver speichern. REST-Schnittstelle anbieten und mit allen Anwendungen darauf zugreifen. Die Datenbank dahinter ist dann Nebensache und nach aussen hin völlig egal, weil es keine direkten Berührungspunkte gibt.

Kannst du mir das nochmal etwas ausführlicher beschreiben? Mein Prinzip wäre jetzt gewesen, einfach mit den FireDAC-Kompos 'ne Verbindung zu dem MySQL Server herzustellen. Warum zwangsweiße auf einem Webserver speichern? Und was genau ist den REST ? :oops: Aus dem Wikipedia-Artikel dazu bin ich jetzt nicht so schlau geworden. Wie kann mir REST in meinem speziellen Fall weierhelfen?

Sir Rufo 2. Nov 2014 01:00

AW: Die richtige Datenbank- und Komponentenwahl
 
Jupp, schau mal da
http://www.delphipraxis.net/1277413-post4.html

mjustin 2. Nov 2014 11:07

AW: Die richtige Datenbank- und Komponentenwahl
 
Zitat:

Zitat von ByTheTime (Beitrag 1278385)
Mein Prinzip wäre jetzt gewesen, einfach mit den FireDAC-Kompos 'ne Verbindung zu dem MySQL Server herzustellen.

Daß man von Clients über Internet direkt auf den Datenbankserver zugreift ist in der Praxis sehr selten zu finden. Zum einen werden dazu Ports benötigt, die nicht in allen Firewalls offen sind. Auch ist es dann für böswillige Clients leicht möglich Dinge mit dem MySQL Server zu machen, die 'unerwartet' bis 'apokalyptisch' sind.

Für Client/Server Kommunikation gibt es eine einfache Regel: traue niemals einem Client.

Den Client indiekt, über eine HTTP Anbindung, mit dem Datenbankserver, sprechen zu lassen ist ein erster Schritt zur Absicherung, denn der Server wird jede HTTP Anfrage prüfen und erst wenn alles ok ist eine Datenbankanfrage an den MySQL Server erzeugen.

Der Aufwand ist natürlich anfangs größer, aber der mögliche spätere Nutzen steigt auch. Zum Beispiel könnte der Webserver Lastverteilung auf diverse HTTP Server und Datenbanken möglich machen. Auch gesicherte Verbindungen sind über TLS (HTTPS) problemlos möglich. Auch die Benutzerkonten des MySQL Servers werden nicht extern verwendet, Der HTTP Server kann seine ganz eigene anwendungsbezogene Benutzerverwaltung haben, und vieles mehr.

ByTheTime 2. Nov 2014 13:45

AW: Die richtige Datenbank- und Komponentenwahl
 
Okay, dann heißt das für mich jetzt erstmal viel viel lesen und basteln :P

Dankeschön!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz