Welche Datenbank wäre hier Sinnvoll?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Welche Datenbank wäre hier Sinnvoll?

    Hallo allerseits,
    da ich keine mit Schränken zugebaute Zimmer mag, hab ich vor ca.2 Monaten ein Großprojekt gestartet um in der Wohnung mehr freie Fläche zu schaffen.
    Nun sind dort 3 Lagerplätze in form von 2 Nieschen und einem Schwerlastregal in der Abstellkammer.
    Dort wiederum sind Kunstoffboxen mit Elektronikkomponenten, Werkzeuge, Büroartikel, Filamente, 3D-Drucke, Mikro-Controller etc.pp untergergracht.
    Des weiteren sind in den Regalen Kunstoffboxen und Kartonagen mit Diversem Zeugs, Aktenordner, Bücher, DVD's, PC-Komponenten, Spielekonsolen und,und, und...

    Jetzt ist zwar alles Top sortiert, jedoch finde ich nichts wieder ohne alles durchsuchen zu müssen und das nervt mich absolut und total :thumbdown:

    Bisher hab ich kleinere Datenbanken in Form von *.ini Dateien in den Programmen genutzt, aber das würde jetzt wohl den Rahmen sprengen.
    Da ich mich bisher nur gering mit Datenbanken und deren Suchfunktionen beschäftig habe und im Moment absolut Planlos bin welcher Datenbanktyp da Sinn machen würde und wie die Benutzeroberfäche gestaltet werden soll, also zb. als Treeview (was ich bevorzugen würde, aber mit Sicherheit hierbei schwer umsetzbar ist) oder doch besser in tabellarischer Form, wollte ich euch mal fragen ob ihr vieleicht eine Idee dazu habt und wie ich da am besten logisch organisiert dran gehe.
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Ich kann dir Microsoft SQL Server Compact empfehlen.
    Dies ist eine Offline-Datenbank, also ohne MS-SQL-Server.
    Ideal um Daten zu speichern.
    Aber du solltest mindestens die SQL-Grundlagen lernen.
    Visual Basic.NET 8o
    MS-SQL
    8o
    Finde ich auch. Fange an mit einem tDS (typisierten Dataset). Kann sein, dass es am Anfang ein bisschen ungewohnt ist, und man viel nachrecherchieren muss. Es lohnt sich aber.

    Wenn man diese Werkzeuge im Griff hat, gibt es weitere Möglichkeiten auf Datenbanken, ohne vorher auf Datasets etc. verzichten zu müssen. Es gibt hier gute Beispiele im Forum.

    Freundliche Grüsse

    exc-jdbi
    bevor man diese Frage beantworten kann, ein paar Gegenfragen:
    • Wird immer von einem Gerät zugegriffen oder von mehreren?
    • Wird immer von einem Benutzer zugegriffen oder von mehreren?
    • Kann die Kombination mehrere Benutzer von mehreren Geräten gleichzeitig vorkommen?
    • Sollen Zugriffen von "außen" stattfinden?
    • Wie soll die Oberfläche realisiert werden?
    • Auf welchem Betriebssystem soll die Datenbank laufen?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Erstmal Danke für die ersten Antworten.

    @Cheffboss behalte ich mal im Hinterstübchen.

    @EaranMaleasi & @exc-jdbi
    Bei XML handelt es sich um eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten im Format einer Textdatei und diese ist absolut mit Tags zugemüllt.
    Ich bezweifele das es vom Speicherbedarf und der strukturierten Lesebarkeit mit einer *.ini mithalten kann.

    @MrTrebron
    Der Zugriff findet immer Intern und immer nur von einem Gerät aus statt. Wer drauf zugreift spielt keine Rolle.
    Die Oberfläche wie bereits erwähnt und das Betriebssystem wäre Windows7, evtl. Windows10 am Laptop.
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)

    Steppenpferd schrieb:


    Bei XML handelt es sich um eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten im Format einer Textdatei und diese ist absolut mit Tags zugemüllt.
    Ich bezweifele das es vom Speicherbedarf und der strukturierten Lesebarkeit mit einer *.ini mithalten kann.


    Wenn man keine Ahnung hat, sollte man die Antworten vielleicht nicht so abwatschen wie Du es getan hast. Weil Du weißt noch gar nicht, was eine Rolle spielt und was nicht.
    Deine Antwort hier oben im Zitat geht völlig in die falsche Richtung. Wenn Du eine XML mühsam "von Hand" oder Knoten für Knoten interpretieren müsstest, hättest Du recht.
    Aber das typisierte Dataset lädt und speichert die Daten (deren Struktur die einer DB exakt entspricht) mit jeweils einer einzigen Zeile:
    Dataset.ReadXml(Dateiname) bzw.
    Dataset.WriteXml(Dateiname).

    Um Speicherplatz zu sparen kann man das ganze durch einen GZipStream machen.

    Der Rat ein typisiertes (im Designer erstelltes) Dataset zu nutzen ist wirklich sehr gut und es ist auch nicht langsam. Ich arbeite durchaus mit Datasets, die bis zu mehrern 100 Tsd. Datensätze in diversen Tabellen nutzen.

    Ein Beispiel fürs einlesen (normal und komprimiertes File):
    Spoiler anzeigen

    C#-Quellcode

    1. //nicht komprimiertes DS lesen:
    2. Dataset.ReadXml(Dateiname);
    3. //komprimiertes DS lesen:
    4. using (FileStream stream = new FileStream(Dateiname, FileMode.Open, FileAccess.Read))
    5. {
    6. using (System.IO.Compression.GZipStream zipper =
    7. new System.IO.Compression.GZipStream(stream,
    8. System.IO.Compression.CompressionMode.Decompress, false))
    9. {
    10. Dataset.ReadXml(zipper);
    11. zipper.Close();
    12. }
    13. }


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dksksm“ ()

    Dksksm schrieb:

    Wenn man keine Ahnung hat, sollte man die Antworten vielleicht nicht so abwatschen wie Du es getan hast


    Ok sorry wenn es zu forsch rüber gekommen ist, war nur meine Meinung dazu. Als ich das erste mal einer Datenspeicherung gegenüber stand hab ich beide Methoden getestet und mich für den PrivateProfilString entschieden.

    Auf die Daten greife ich so zu:

    VB.NET-Quellcode

    1. iniRead(strSection,strKey)
    2. iniWrite(strSection,strKey,strData)
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)

    Steppenpferd schrieb:

    Bei XML handelt es sich um eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten im Format einer Textdatei
    Gut, du kennst die Definition von XML in- und auswendig, tut jedoch nichts zur Sache, da, wie @Dksksm bereits sagte, XML hier nur Mittel zum Zweck ist.
    Was ist der Zweck? Die möglichst einfache Speicherung von Daten. Diese Datei solltest du im Normalfall niemals anfassen müssen. So bekommst du nen Tabellen Designer (Die Tabellen sind sofort im Code aufrufbar), mitsamt Speicherframework im Hintergrund. Mit 2 Zeilen Code!

    Darüber hinaus ist eine .ini Datei auch keine Datenbank, sondern eine Konfigurationsdatei. Sie Speichert die Konfiguration eines Programms. Keine Daten einer Datenbank.

    Edit:

    Steppenpferd schrieb:

    Auf die Daten greife ich so zu:
    Und das machst du für jeden einzelnen Datensatz. Mit den typDataSet machst du das nur beim Start der Anwendung und am Ende.
    Ein weiterer Punkt, der für die Einarbeitung in die Datasets etc spricht, ist.
    Mit den Werkzeugen die das Framwork bietet, erhälst du die Möglichkeit (ohne gross selber neue Sachen zu erfinden) Einblick in die Datasets, Databinding, Datenmodelierung und noch vieles mehr.

    Ich finde zum Erlernen von .Net selber, und zum Einarbeiten in die ganzen Datenbank-Geschichten, bietet das Framwork eine gute Basis mit sehr ausgereiften Werkzeugen die sich zum Teil wirklich gut bewährt haben. Man kann es ja ein Stuckweit auch als Chance ansehen.

    Ich kann nur empfehlen, diesen Weg anzupacken. Was man so gelernt hat, ist später auch für viele andere Sprachen verwendbar, vor allem was Datenmodellierung anbelangt.

    Freundliche Grüsse

    exc-jdbi
    Dataset ist eine feine Sache.
    Das Visual-Studio bietet viel Unterstützung und vereinfacht
    das (Bearbeiten) Speichern und Laden der XML Dateien.
    Jedoch find ich es schade das sich hier im Forum das so eingebürgert
    hat , daß für fast jedes Problem Typesiertes Datatset empfohlen wird.
    Das ist nicht nur nervig, sonder behindert auch die Weiterentwicklung
    und die möglichkeit anderer vorhandenen Techniken zu erlernen.
    Bitte nicht falsch verstehen , ich finde das einfache und schnelle Ergebnis
    mit dem Dataset echt gut.
    Aber das kann doch nicht alles sein Leute!?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amro“ ()

    Okay ihr habt mich jetzt erst mal soweit überzeugt, das ich mir die Sache genauer anschauen werde.
    Kann ja sein das mir das Arbeiten mit der ini einfacher vor kam weil ich damals, im Gegensatz zu heute, .NET noch nicht so gut Interpretieren konnte.

    Danke erst mal soweit,
    heute Abend oder morgen Früh werde ich mich mal dran setzen und melde mich dann so in 1-2 Tagen nochmal.

    Edit: hab grade erst den Beitrag von @Amro (Ich Danke auch Dir) gesehen und mich würde auch ein breiteres Spektrum an Möglichkeiten Interessieren.
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Steppenpferd“ ()

    @Amro
    Es gibt viele Arten Informationen abzuspeichern. Sobald es sich jedoch um Daten bzw. strukturierte Daten handelt, ist es schon ganz sinnvoll ein Werkzeug zu nutzen, dass auch Strukturen festhalten kann, schliesslich will man die entsprechenden Daten nachher auch visuell auf dem Bildschirm dargestellt haben, mit geeigneten dafür vorgesehene Werkzeugen.

    Warum sich also das Leben schwer machen, wenn es genau dafür vorgesehene Boardmittel gibt.

    Ich bin mir sicher, sofern du eigene Vorstellungen hast wie man Daten speichern kann, und diese sich auch bewähren, dass du hier im Forum Unterstützung bekommst.

    Freundliche Grüsse

    exc-jdbi
    Dann werfe ich jetzt einfach mal Entity Framework (EF) in die Runde.
    Wer mag kann auch einen andren Object-Relational-Mapper (ORM) wie Dapper nehmen.

    Auch da erfindet keiner das Rad neu und für EF ist die Unterstützung im Visual Studio ebenfalls da. Gibt es, afaik, für das .net Framework aber auch für Core.

    Damit ließe sich dann auch eine multi-client und multi-user Umgebung aufbauen.

    Und wenn wir schon beim .net Framework und der objektorientierten Programmierung sind, macht ein ORM aus dem Tabellen-Daten Objekte mit denen man dann entsprechend weiterarbeiten kann.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @Amro & @Steppenpferd natürlich gibt es ein breites Spektrum, doch sind wir mal ehrlich, kaum eine Lösung ist so gut in Visual Studio integriert, wie die typDatasets mitsamt der Speicherung in XML Dateien. Natürlich könnte ich hergehen und vorschlagen, dass man einfach sich ein paar Listen zusammenbastelt, und die dann serialisiert; natürlich könnte ich Access, SQL Compact oder SQLite vorschlagen, die dann neben der exe liegen; natürlich könnte ich MySQL, SQL Serve oder Oracle vorschlagen, zu denen man sich verbindet; natürlich könnte ich irgendwelche NoSQL-DBs vorschlagen; natürlich könnte ich oben drauf noch einen ORM-Mapper vorschlagen, der einem die Arbeit mit den DBs vereinfacht, doch das alles ist in meinen Augen einfach overkill.
    Sollte mal die Zeit kommen, dass das Laden und Speichern der XML ewig dauert, oder die APP zu viel RAM frisst, dann legt man sich einfach ne SQLite neben die Anwendung, und bindet diese ans typDataset. Sollte Multi-User Support eines Tages anfallen, kann ich die Connection austauschen. Und wenn man am ende dann doch zu viel Overhead hat mit dem typDataset, und man das letzte bisschen Performance haben möchte, kann man noch immer einen ORM-Mapper einabuen, oder die Datenabfrage komplett verdrahten.

    Das tolle an typDataset ist einfach, man lernt so vieles dabei, was man später auch ohne sie gebrauchen kann. Daher sind sie einfach ein perfekter Einstieg in die DB Welt, ganz ohne DB.
    Ganz genau.

    @Steppenpferd

    Ich frage einfach mal direkt. Du sprichst hier wirklich ein sehr grosses Spektrum an.
    Welche Kenntnisse bringst du schon mit?
    Was für Ziele hat du dir vorgenommen zu diesem Thema?
    Welche Themen interessieren dich und welche nicht?

    Ich denke das sind Fragen mit denen man sich am Anfang auch befassen sollte.

    Freundliche Grüsse

    exc-jdbi
    Eine Frage zu XML wärend ich die Informationlawine bewältige.
    Wenn ich es richtig verstanden hab ist XML streng Hicharisch Strukturiert.
    Wenn nun Gegenstände gelagert werden, kann man davon ausgehen das sich ein Lagerplatz auch mal ändert.

    Ist es dann überhaupt möglich das ich z.B. die Kiste1 von Platz1 durch das Teil von Platz2 ersetze?

    Platz1 - Kiste1 - auflistung des Inhalts
    Platz1 - Kiste2 - auflistung des Inhalts
    Platz1 - Kiste3 - auflistung des Inhalts

    Platz2 - irgend ein Teil
    Platz2 - Akte1 - Akte2 - Akte3
    Platz2 - Kiste4 - auflistung des Inhalts
    Das Chaos beginnt mit komprimierter Ordnung (Steppenpferd 2019)
    Wie oben schon erwähnt wurde, wird die XML-Sprache für Daten und Struktur und für die Interpretation im Datasets gebraucht.

    Es spielt keine Rolle, was sich an Daten ändert, solange die Struktur bestehen bleibt.
    D.h. also. Die Werte der Daten können veränderbar oder als ReadOnly benutzt werden, ausser die ID's, die sind fix.

    Um das verstehen zu können, kann ich dir nur die Beispiele von @ErfinderDesRades in seinen vielen Tuts ans Herz legen.


    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Steppenpferd schrieb:

    Eine Frage zu XML wärend ich die Informationlawine bewältige.


    Du musst dich mal vom XML lösen, damit hast Du direkt gar nichts zu tun. Das Dataset ist die "Datenbank", halt nur komplett im Arbeitsspeicher und die XML hält diese Daten mitsamt der Struktur nur vor. Es ist sozusagen dein Snapshot, der am Ende der Arbeit mit deinem Programm die Daten und Struktur wieder auf die Platte schreibt. Startest Du dein Programm und hast die XML eingelesen, dann ist die "DB" wieder im Bauch deines Programms.
    Jo - Dass das Dataset sich in Xml abspeichert ist eiglich wumpe. Es könnte sich auch binär abspeichern, hauptsache es speichert sich ab.
    Und das tuts numal als Xml.
    Das Xml eine Datasets ist auch besonders strukturiert. Also normalerweise hätteste mit

    Steppenpferd schrieb:

    Bei XML handelt es sich um eine Auszeichnungssprache zur Darstellung hierarchisch strukturierter Daten...
    nicht unrecht, wobei das Problem keinesfalls der Speicherplatz-Bedarf ist, sondern das Problem ist die hierarchische Struktur.
    Weil eine Datenbank - und auch ein typisiertes Dataset - stellen eine relationale Struktur dar, und nur eine relationale Struktur ist fähig, eine m:n-Relation zu modellieren.
    Eine hierarchische Struktur kann nur 1:n-Relationen, und das langt für 90% der AnforderungsProfile einfach nicht hin (und für deine Lagerverwaltung auch nicht).



    Zum Speicherplatz: Ein typDataset mit mw 1000 Datensätzen speichert sich in - ganz grob geschätzt - eine 100kb-xml-Datei.
    Bei einer Access-mdb fängt auch eine leere Db unter 4mb garnet erst an, und Sql-Server läuft in dieser Hinsicht völlig Amok.
    Einzig SqLite ist annähernd so SpeicherplatzSparend wie typDataset-Xml.