Laden...

Starthilfe für Datenbankanwendung

Erstellt von xbredoillex vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.236 Views
X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren
Starthilfe für Datenbankanwendung

verwendetes Datenbanksystem: keins

Hallo,

ich würde mich gerne in das Thema Datenbanken einarbeiten. Dazu will ich mir eine Art Haushalts-/Tagebuch programmieren, in dem z.B. Ausgaben und andere Dinge gespeichert werden und im Nachhinein gefiltert wieder abrufbar sein sollen. z.B. wie viel habe ich für McDo.... oder für Döner ausgegeben, wieviel habe ich im Januar in Bier investiert? =)
[Edit/Anmerkung: Im Beitrag von 31.01, 13:51 Uhr habe ich meine Vorstellungen noch einmal präziser dargestellt 🙂]

Kriterien für die Auswahl einer Datenbank sind für mich:

  • am besten sollte man nichts Zusätzliches (server o.ä.) installieren müssen
  • die Daten sollten in einer einzelnen Datei lagern (ähnlich z.B. ein Excelfile), um sie bei Bedarf problemlos finden und sichern zu können
  • die Datenbank sollte mit c# unkompliziert zu handhaben sein
  • die Datenbank sollte einigermaßen System- oder Sprachunabhängig sein
  • evtl. verschlüsselbar
  • und das Wichtigste: sie muss kostenlos sein

Nun habe ich versucht mich für eine bestimmte Datenbank zu entscheiden, komme aber zu keinem Schluss. Es gibt irgendwie zu viele Unterschiede und Vor- und Nachteile, das macht eine Entscheidung irgendwie echt schwer wenn man noch nie etwas mit Datenbanken zu tun hatte.

Meine Frage an euch:
Welche Datenbankart, welches System, welche Technik würde sich für meinen Anwendungszweck anbieten?

Vielen Dank im voraus.

Gruß
xbredoillex

1.564 Beiträge seit 2007
vor 14 Jahren

Solche Fragen gab es hier schon x-mal. Suche einfach mal nach "Compact SQLite". Da wirst du diverse Threads finden in denen die Vor- und Nachteile der unterschiedlichen Systeme verglichen werden.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Bei Systemunabhängig fällt aber Sql Compact schon raus.

Dann bleibt als einzige kostenlose EmbeddedDB, die einfach zu bedienen ist
eigentlich nur noch SQLite.

Allerdings ist da die Verschlüsselung durch den Provider Geregelt, weshalb die
verschlüsselte Windows variante nicht von Linux ( Mono ) gelesen werden kann.

Ansonsten geht es sogar soweit, das ich auf meinem Android Handy eine Windows SQLite öffnen kann.

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Hallo,

@ Florian Reischl
Sorry, ich habe hoffentlich nicht den Eindruck eine "faulen Nichtsuchers" erweckt, der eine Lösung präsentiert haben will. Ich hätte meine Frage etwas anders formulieren sollen und genauer beschreiben sollen, welche Datenbanken ich schon eingegrenzt habe und wobei ich mir bei diesen unsicher bin.

Das mit der Suche ist so ne Sache bei Datenbankthemen. Wenn man nicht genau weiß nach was man im Web suchen soll, dann dreht man sich im Kreis. Allein der Begriff "embedded" bringt einen bespielsweise schon viel weiter, den muss man aber erstmal kennen um danach zu suchen.
Wenn man am Anfang steht kommt, kann man nicht wirklich voraussehen ob man eine relationale, objektorientierte oder objektrelationale Datenbank benötigt, oder evtl. doch ne eigene XML-basierte Lösung anstrebt oder LINQ2XML verwendet etc.
Viele Beiträge im Forum sind z.B. veraltet (2005) und berücksichtigen die Möglichkeiten von .Net 3.5 oder 4 nicht, oder es gab es zu diesem Zeitpunkt noch keine C#-dlls für "diese oder jene" Datenbank.
Man findet vor allem immer wieder Beiträge in denen alle gängigen Datenbanken aufgezählt werden, aber entweder sind die Antworten zu speziell und mit unbekannten Akronymen gespickt (das Nachlesen dieser ist nicht immer fruchtbar oder verständnisfördernd, eher verwirrend und unverhältnismäßig zeitraubend), oder man findet Beiträge in denen darauf hingewiesen wird, dass die Frage schon oft gestellt wurde (ist nicht böse gemeint) 😃.

@ FZelle
SQLite war schon in meiner engeren Wahl, ich glaube das werde ich nehmen.

Gruß
xBredoillex

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Offenbar kann man sich wegen der großen Unterschiede nicht einfach mal eben mit Datenbanken beschäftigen. Man kann so wie es aussieht immer nur mit einem Datenbanksystem Erfahrungen sammeln, die für andere DB-Systeme nicht übertragbar sind. Es gibt nur einen sehr kleinen gemeinsamen Nenner. Oder irre ich mich?

Ich habe nun genauere Vorstellungen was mein Programm beinhalten soll.
Ich möchte sowohl mein Haushaltsbuch als auch mein Tagebuch auf dem PC weiterführen. Und das soll mit einem einzigen Programm geschehen. Darum war auch eine Verschlüsselung angedacht.
Vom Prinzip her soll im Hauptfenster ähnlich wie in einem Terminplaner ein Kalender angezeigt werden. Beim Klicken auf einen Tag, sollen dann die entsprechenden Daten angezeigt werden. Man kann zwischen Tagebuch und Haushaltbuch-Modus umschalten. Über eine Suchmaske können Informationen gesucht werden.

Mir schwebt z.B. folgendes vor:

  • suche alle Tage, in deren Tagebucheinträgen das Wort "Fußball" vorkommt oder die Worte "Date, Tanja" enthalten sind
  • suche alle Tage an denen ich mein Auto betankt habe
  • summiere mir alle Kosten die mir mein Auto für den Zeitraum x verursacht hat (Auto ist im Haushaltsbuch ein Posten mit fixen und nicht fixen Kosten)
  • summiere mir alle Kosten für Kleidung im Jahr 2009

Geht das überhaupt mit einer relationalen Datenbank umzusetzen?
Ich glaube nicht mehr, dass SQLite das Richtige ist. Wie verhält sich das eigentlich mit langen Texten in SQLite?
Also kann ich da nen seitenfüllenden Tagebucheintrag einer RichTextBox einlesen und vernünftig verwalten?

Wäre eine Objektdatenbank angebracht? Diese hätte dann den Vorteil, dass man auch Fotos einer Geburtstagsparty in den Tagebucheintrag einbetten kann, oder Kopien von Rechnungen etc.
[Edit/Nachtrag] Kann man das mit NHibernate und SQLite auch umsetzen?

Was würdet ihr erfahrungsgemäß für ein Datenbanksystem für diesen Anwendungszweck einsetzen?
Gibt es Bedenken oder Tips?

Gruß
xbredoillex

PS: Ich hoffe ich konnte meine Problematik etwas besser darstellen als in meinem Startbeitrag 😃

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo xbredoillex

Man kann so wie es aussieht immer nur mit einem Datenbanksystem Erfahrungen sammeln, die für andere DB-Systeme nicht übertragbar sind. Es gibt nur einen sehr kleinen gemeinsamen Nenner. Oder irre ich mich?

Jain.

Jedes Datenbanksystem tickt anders als das andere. Selbst das gleiche Datenbanksystem kann sich mit dem nächsten Service-Pack oder einfach anderer Hardware unterschiedlich verhalten.

Andererseits bestehen bei der Programmierung mit unterschiedlichen RDBMSen durchaus viele Parallelen und Regeln die eigentlich immer gelten (wie die Tatsache dass mengenbasierte Operationen immer schneller sind).

Man kann auch auf mehreren Datenbanksystemen zum Spezialisten werden, dann muss man aber immer am Ball bleiben und wird außer Datenbankprogrammierung nichts anderes machen.

... Haushaltsbuch ... Tagebuch ... mit einem einzigen Programm

Das ist natürlich mit einer DB möglich, allerdings sind das recht unterschiedliche Bereiche. Geht schon fast ein bisschen in den EAI (Enterprise Application Integration) Bereich 👅

Wenn's dir weniger um das Tagebuch/Haushaltsbuch als eher um Technologien und Techniken geht kannst du dass ganze ja als SOA Welt aufsetzen und dahinter alles in einem Datawarehouse zuammenpacken 😁

Okay... zurück auf den Boden der Tatsachen... Wie schon gesagt, ist natürlich mit einer (/jeder) Datenbank kein Problem diese Informationen zu halten.

Darum war auch eine Verschlüsselung angedacht.

Da wird's schon schwieriger. Ich weiß nicht ob es irgendeine kostenlose DB gibt die native Verschlüsselung unterstützt. Bei SQL Server geht das z.B. erst ab 2008 und nur bei der Enterprise Edition (=25.000$).

Mir schwebt z.B. folgendes vor:
...
Geht das überhaupt mit einer relationalen Datenbank umzusetzen?

Natürlich, und wahrscheinlich mit jeder.

Ich glaube nicht mehr, dass SQLite das Richtige ist. Wie verhält sich das eigentlich mit langen Texten in SQLite?
Also kann ich da nen seitenfüllenden Tagebucheintrag einer RichTextBox einlesen und vernünftig verwalten?

Auch bei SQLite würde es mich sehr wundern wenn die mit deinen Anforderungen ein Problem hätte. Selbst SQL Compact (läuft halt nur auf Windows) kannst du bis zu 2GB große Texte in eine Zelle pressen.

Wäre eine Objektdatenbank angebracht?

Subjektiv: Nein.

Diese hätte dann den Vorteil, dass man auch Fotos einer Geburtstagsparty in den Tagebucheintrag einbetten kann, oder Kopien von Rechnungen etc.

Es gibt nichts was eine ODB kann das mit einer RDB nicht möglich wäre.

[Edit/Nachtrag] Kann man das mit NHibernate und SQLite auch umsetzen?[/quote
Ja.

Was würdet ihr erfahrungsgemäß für ein Datenbanksystem für diesen Anwendungszweck einsetzen?
Gibt es Bedenken oder Tips?
Ich, SQL Compact oder eher SQL Server Express. Mich stört der Dienst nicht (weil er eh das erste ist dass ich nach dem Betriebssystem installiere :cool🙂

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

1.564 Beiträge seit 2007
vor 14 Jahren

Hi nochmal

Den hatte ich total übersehen...

Sorry, ich habe hoffentlich nicht den Eindruck eine "faulen Nichtsuchers" erweckt...

So hatte ich es auch nicht empfunden. Das Problem bei der Frage nach der "richtigen" Datenbank ist einfach dass das zum großen Teil Geschmackssache ist.

Ich würde subjektiv immer und überall SQL Server Express/Standard/... empfehlen und mich vielleicht noch mit murren auf SQL Compact einlassen. Andere schwören auf PostgreSQL oder Oracle Lite/...

Du kannst normalerweise alles mit allen abdecken. Ausnahme sind da nur Themen wie Multi-User bei SQL Compact und vielleicht anderen Embedded DBs. Ein ausgewachsenes RDBMS kann eigentlich immer alle Anforderungen abdecken, wenn man weiß wie.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Dem kann ich nur zustimmen, wobei ich bei Embedded DB eher auf SQLite gehe.

Das ist für verschiedene System erhältlich ( bei Android sogar vom OS unterstützt )
in Mono fester Bestandteil, und unter Windows in einer einzelnen DLL.

Auch hat SQLite keine 4GB Begrenzung, die dann ins Spiel kommen kann,
wenn man viele Binäre Daten in die DB speichern will.
Ein bekannter hatte für seine Studenten WG mal eine SQLite DB mit den ganzen MP3
und DVD's auf dem Server, die dann im ganzen Haus gestreamt werden konnten.

Und die Windows Version unterstützt eben auch Verschlüsselung.

Aber ansonsten ist das "bischen" Anforderung von jeder DB ( selbst Access )
abdeckbar.

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Hallo,

Das ist natürlich mit einer DB möglich, allerdings sind das recht unterschiedliche Bereiche. Geht schon fast ein bisschen in den EAI (Enterprise Application Integration) Bereich 👅

Mein Vorhaben hört sich schon etwas "größer" an, aber ich will das ja nicht alles auf einmal programmieren. ich werde mich zunächst mit dem Haushaltsbuch beschäftigen. Ich will mir nur vorab sicher sein, das Gröbste in die Planungen einbezogen zu haben und eine gewisse Flexibilität für die Zukunft zu bewahren.

Es gibt nichts was eine ODB kann das mit einer RDB nicht möglich wäre.

Das klingt gut. ODB sind offenbar nicht so stark verbreitet und scheinen eher Nischenprodukte zu sein.

Das Problem bei der Frage nach der "richtigen" Datenbank ist einfach dass das zum großen Teil Geschmackssache ist.

Das ist gut zu wissen und für einen Einsteiger nicht so leicht von einem objektiven Vorschlag zu unterscheiden. Jetzt weiß ich, warum sich in einigen Beiträgen die Aussagen anhören als bestünde ein Werbeabkommen. 🙂

Auch hat SQLite keine 4GB Begrenzung, die dann ins Spiel kommen kann,
wenn man viele Binäre Daten in die DB speichern will.

Daraus entnehme ich, dass man die nicht unterstützen Datentypen auch irgendwie unterbringen kann.

Und die Windows Version unterstützt eben auch Verschlüsselung.

Das ist einer der Gründe weshalb ich Firebird Embedded nicht verwende. Dort wäre ein Verschlüsseln meiner Ansicht nach umständlich.

So wie es aussieht werde ich jetzt SQLite verwenden. Und NHibernate scheint es auch Wert zu sein, sich damit zu beschäftigen.
Jetzt brauche ich nur noch ein gutes Tutorial, vor allem eines worin erklärt wird, wie man die erwähnten binären Dateien "verwurstet". Vielleicht hat ja jemand noch ein paar gute Tipps oder Links zu solchen.

Vielen Dank nochmal.

Gruß
xbredoillex

1.564 Beiträge seit 2007
vor 14 Jahren

Hi

Also Binärdaten kann man wieder in jeder DB speichern. Was verstehst du denn darunter? Wenn du Bilder etc. meinst, dann okay. Mach bloß nicht den Fehler anzufangen Objektbäume in .NET zu serialisieren und dann in die DB zu stecken. Dafür ist eine RDB ja Relational 😉. Dafür gibt's zwar valide Business-Cases aber das sind extrem wenige und gerade am Anfang dürftest du dich noch nicht in dem Bereich bewegen. Bevor du so was machst, mach hier lieber einen neuen Thread auf und frag' nochmal nach was andere in dem Fall machen würden. 😉

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Hi,

nene, keine Sorge, ich meine schon Bilder u.ä.

Mir ist nur noch nicht klar, wie z.B. ein JPG in die Datenbank kommt.
Bisher habe ich immer nur Beispiele mit Datensätzen aus Datentypen wie int oder string gesehen. Deshalb dachte ich anfangs, solche DB könnten nur einige wenige Datentypen aufnehmen bzw. nicht mit JPG umgehen und habe naiverweise angenommen, die DB kann nur einen Verweis auf das Bild, aber nicht das Bild selbst aufnehmen.

Gruß
xbredoillex

1.564 Beiträge seit 2007
vor 14 Jahren

Hi

Das geht eigentlich genau wie mit Strings oder Zahlen auch. Du verwendest ein parametrisiertes SQL Statement aller:

INSERT INTO FooTable (Id, Picture) VALUES(@id, @picture)

(Ich weiß nicht ob SQLite Parameter mit Namen unterstützt, ansonsten muss halt die Reihenfolge der Parameter passen)

Das ganze rufst du über ein DbCommand (SQLiteCommand?) auf und bindest dabei die beiden Parameter.

(Wenn du ein Tutorial hast in dem das komplette SQL Statement mit Strings zusammengebaut wird, wirf es weg)

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

X
xbredoillex Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Alles klar, vielen Dank!

C
32 Beiträge seit 2009
vor 14 Jahren

Kriterien für die Auswahl einer Datenbank sind für mich:

  • am besten sollte man nichts Zusätzliches (server o.ä.) installieren müssen
  • die Daten sollten in einer einzelnen Datei lagern (ähnlich z.B. ein Excelfile), um sie bei Bedarf problemlos finden und sichern zu können

Wenn's dir weniger um das Tagebuch/Haushaltsbuch als eher um Technologien und Techniken geht kannst du dass ganze ja als SOA Welt aufsetzen und dahinter alles in einem Datawarehouse zuammenpacken 😄

😁

aber mal zurück zum thema - ich würde auch den express nehmen. du hast einfach die meisten möglichkeiten und wenn du nicht grad iwas für die raumfahrt (oä.) programmierst sollten dich die paar mb Speicher und der Dienst auch ni stören. Grad wenn man eine Anwendung später noch ausbauen will würde ich eher einen "richtigen" sql server nehmen. Bei Compact Versionen hast du immer iwelche Einschränkungen