Datenbank oder Filesystem? (E-Learning)

Ein <3-liches Hallo an alle,

Da im Dezember nun die Abschlussprüfung für meine Ausbildung ansteht, habe ich mir vorgenommen eine Art kleines E-Learning Programm zu schreiben welches mir und meinen Mitazubis bei der Prüfungsvorbereitung helfen kann.

Meine Problematik hierbei ist die Art und Weise wie ich die Prüfungsfragen speichere und wieder lade.
Abspeicher in Form von Text in einer Datei habe ich hinbekommen. Speichern sowie laden. Aber nur bei den einfacheren Aufgaben (Ohne Bilder etc.) So habe ich mich gefragt ob und wie eine Datenbank vielleicht hilfreicher wäre.

Frage-Klassen hätte ich grob gesagt folgende (Texteinrückung = Vererbung):

Frage (Thema(String), Schwierigkeit(Int), Fragetext(String): Dies wird von allen Fragen benötigt
----Gebundene Frage (Lösungen[String array größe 5], Richtige Antwort (int)
--------Gebundene Frage mit Bild (Bild(Image))
----Ungebundene Frage (Antworttext(String))
--------Ungebundene Frage mit Bild (Bild(Image))

Meine Frage:

  • Ist es Sinnvoller diese (Sind bestimmt über 1000 Fragen) in nach Thema sortierten Dateien zu speichern, oder mich in Datenbanken einzuarbeiten und diese zu nutzen?

Vielen dank für die Hilfe im Vorraus,
Toriath

Ein DBMS ist besser, da bekommst du save, delete, update usw. for free mit, wenn du nur in Datei speicherst, musst du das alles selber machen und das ist nervig. Wenn du ein Framework benutzt musst du dich nicht mal mit einem DBMS befassen, z.B. play framework erstellt dir alles automatisch, ist in ein paar Minuten aufgesetzt und funktioniert halt einfach. Als Anfänger wirst du ein wenig länger benötigen, trotzdem besser als alles von Hand zu machen und sich danach ärgern dass es nicht funktioniert.

Auf kurz oder Lang wirst du ehh keine Möglichkeit haben da herum zu kommen.

Bei so einem stark Dokumentenlastigen Problem, wie dem E-Learning, könnte sich auch eine NO-SQL DB eigenen. Aber wenn es nur 1000 strukturierte Fragen sind, dann reicht jede kleine RDBMS.

Alles klar, dann werde ich mich alsbald mal daran machen mich über Datenbanken zu informieren. Welches DBMS bzw. RDBMS ist denn für einen Anfänger leicht zu verwenden?
Habt ihr vielleicht eine Seite oder ein Tutorial im Kopf welches einem dieses Thema gut rüberbringen kann?

Ansonsten: Danke fürs erste ich mach mich ans lernen!

MfG,
Toriath

Ich würde da MySQL oder eine eingebettete DB nehmen, wie H2!

H2 installiert man schnell und ist „portabel“.

[QUOTE=Marcinek]Ich würde da MySQL oder eine eingebettete DB nehmen, wie H2!

H2 installiert man schnell und ist “portabel”.[/QUOTE]

Ich denke ich werde MySQL versuchen. Ich denke zwar das es anfangs ein wenig Komplizierter sein könnte aber da ich auch Interesse an Webprogrammierung mit PHP habe schadet MySQL mit keinesfalls.

Danke für die Hilfe erstmal! Werde das Thema mal als “gelöst” markieren. Hilfe ist aber immer willkommen. (Wobei ich natürlich fürs lernen selbst verantworlich bin^^)

LG, Toriath

+1, wobei man H2 gar nicht installieren muss. Einfach die JAR bzw. dependency reinklatschen und fertig.

Wenn das ganze in einem übersichtlichen Rahmen bleiben soll kannst du auch SQLite ausprobieren, alternativ kannst du dir auch die Projekte Ashpool und Ozone anschauen…

Allgemein ist eine Datenbank natürlich ein gewisser Standard, der prinzipiell zu bevorzugen ist.

Aber speziell bei deinem Problem, hätte ich noch eine andere Idee:

Es gibt für deine Applikation ein Verzeichnis, in dem sie Fragen sucht (konfigurierbar). Jede Frage ist ein Ordner in diesem Verzeichnis. Meinetwegen kann der Ordner-Name ja der Fragen-Titel sein. In jedem Ordner gibt es eine question.txt, in der die Frage steht. Für Multiple-Choice-Fragen kann es auch eine answers.txt geben, die Pro Zeile eine Antwort-Möglichkeit erhält (meinetwegen steht ein * zu Beginn der Zeile, die die richtige Antwort ist). Und ein Bild wird als img.png in dem Ordner abgelegt.

Das ist dann zwar Datei-basiert, aber du kannst Fragen schnell austauschen, zusammenführen, etc… Fragen lassen sich schnell (auch von Leuten, die dein Programm nicht haben) erstellen, in dem Ordner mit der entsprechenden Struktur erstellt werden. Und man kann das Programm schnell mal von Platte zu Platte kopieren.

Ich weiß jetzt nicht, ob sich damit alle Anforderungen deines Programms abdecken lassen, aber wenn es so Dokumentenlastig ist, würde ich das Filesystem als Datenbasis zumindest in erwägung ziehen.

Wenn du jetzt natürlich noch andere Daten speichern willst (Nutzer, Score, whatever), dann wäre zu überlegen, ob du dafür nicht doch eine Datenbank verwendest. Da würde ich dir dann HyperSql empfehlen, denn da kann man per flag bestimmen, ob es in einer Datei abgelegt werden soll.

Ganz wichtig: Entscheide dich für EINE Lösung: File-System (inkl Filebasierter DB) ODER Datenbank-Server. Nichts ist schlimmer als Verzeichnisnamen auf Datenbank-Servern, die Annahmen über den Rechner treffen, auf dem die Applikation vermeindlich läuft.

Alles was du speicherst wird in einer Datei abgelegt.

[QUOTE=Antoras]Alles was du speicherst wird in einer Datei abgelegt.[/QUOTE]Kommt drauf an, wie du „speichern“ definierst. Wenn ich ein INSERT-Statement abschicke, dann muss das nicht zwangsläufig auf der Platte landen. Denn du kannst HyperSql auch so einstellen, dass er nur eine Datenbank im Speicher simuliert (die nach Programm-Ende natürlich wieder weg ist).

Und natürlich wird alles irgendwie in Dateien abgelegt. Aber es ist doch ein Unterschied, ob ich ein jar einbinde und dann Dateien auf der Platte erzeugt werden (HyperSql), oder ob ich erst einen Sql-Server aufsetzen muss, der dann eben Dateien auf Platte schreibt (und zu dem sich meine Applikation dann auch noch verbinden muss).
Daher habe ich zwischen „direkt Files schreiben“ (HyperSql, Properitär) und „Datenbank-Server“ (MySql) unterschieden. :wink:

Google sagt, dass MySQL die Daten auch im RAM ablegen kann. Vermutlich hat das mittlerweile jedes größere DBMS drauf, wäre für mich also kein Entscheidungsgrund.

Funzt nur eingeschraenkt, da MySQL sich dann anders verhaelt… also nutzlos IMHO.

Weder Oracle noch Postgres haben uebrigens einen In-Memory mode.
Sollte man aber beides auch auf einer RamDisk laufen lassen koennen, bei Postgres funzt das, bei Oracle bestimmt auch.

[QUOTE=Antoras]Google sagt, dass MySQL die Daten auch im RAM ablegen kann. Vermutlich hat das mittlerweile jedes größere DBMS drauf, wäre für mich also kein Entscheidungsgrund.[/QUOTE]:rolleyes: Es geht ja auch weniger um das im Speicher ablegen können oder nicht. Es ging mir vielmehr darum, dass ich mit HyperSql Dateien ohne viel Aufwand erzeugen kann. Das gilt für MySql nicht, da ich hier ja noch einen ganzen Datenbank-Server aufsetzen und starten muss, während ich bei HSql eben nur eine Bibliothek einbinde, die mir Dateien erzeugt (klärt ich auf, wenn es anders ist). Damit kann die Applikation sogar auf einem Rechner laufen, der selbst keine Verbindung zu irgendeinem Datenbank-Server hat.