Zwei Fragen zu Datenbanken für Dokumente

  • Hallöle,


    da ich gerade dabei bin alle möglichen Noten zu digitalisieren, habe ich das Problem, dass es in einer normalen Ordnerstruktur nicht wirklich effektiv funktioniert. Also möchte ich mir ein Programm schreiben, mittels dem ich nach bestimmten Attributen filtern kann und dann die PDF bekomme. Soweit, so klar. Wenn ich nun aber die Datenbank dahinter konstruieren möchte, kommen bei mir zwei Fragen auf:

    1. Um die Dokumente zu bekommen, würde ich einfach ein Feld für den Dateipfad erstellen, nach dem dies dann runter geladen wird. Macht man das so, oder gibt es da eine bessere Lösung?
    2. Da ich auch eine Stücke für Ensemble habe, würde ich gerne die Möglichkeit haben nach mehreren Instrumenten zu filtern, so dass ich z.B. nur Stücke bekommen, mit Orgel und Bratsche. Wie kann man das am geschicktesten Umsetzen? Meine ersten zwei Idee sind entweder ein Feld, in dem die Instrumente mit IDs benannt sind und mit z.B. einem Doppelpunkt getrennt oder eine zweite Tabelle, mit den Spalten Stück und Instrument, in der dann auf jedes Stück und Instrument ein Eintrag kommt. Ich weiß nicht, wie sinnvoll diese Ideen sind.


    Ich hoffe, dass einigermaßen klar ist, was ich meine.


    ~ Jasper

  • Ameinsenbaer

    Hat das Label Ungelöst hinzugefügt
  • Ameinsenbaer

    Hat den Titel des Themas von „Zwei Fragen zu Dokumentdatenbanken“ zu „Zwei Fragen zu Datenbanken für Dokumente“ geändert.
  • Also zur ersten Frage:


    An sich kann man das so machen. Einzige andere Option die mir jetzt noch einfallen würde wäre das Dokument zu BASE64 umzuwandeln und dann das einfach in die Datenbank schreiben jedoch kann ich mir vorstellen das es dabei zu Problemen kommen kann mit Bildern etc.


    Nun zur zweiten Frage:


    Grundsätzlich würde ich wenn du vorhast eine Detailierte Suche zu unterstützen eine Art Tag System empfhelen oder noch weiter gehen und jedes Stück mit einem Filter Dokument versehen.

    Hier mal wie ich mir das vorstelle:


    Ich habe habe ein Dokument zu Beethoven's 5 Symphonie im Ordner /Documents/Beethoven/

    Jetzt lege ich in ein zentrales Verzeichnis /Searches eine Json in welcher folgendes steht


    Wenn du jetzt nicht den Titel des Stückes weißt, kannst du einfach nach den Instrumenten oder nach den Jahren in denen es entstanden ist.

    Um die Suche performant zu machen empfehle ich jedoch nicht jedes mal alle .JSON zu laden und wieder zu entladen sondern dabei geht es eher darum das einfach nur zu speichern. Beim Start des Programmes speicherst du dir die Informationen einfach zwischen.


    Natürlich kannst du all die Informationen auch in ner relationellen Datenbank speichern. Persöhnlich tendiere ich aber eher zu JSON.

    If you are homeless ... just buy a house, duh!

    and if you wanna have a plugin matching your conditions ... just code it yourself!

  • Ameinsenbaer

    Hat das Label von Ungelöst auf Gelöst geändert
  • Wobei du hier eigentlich Daten hast die sich super gut in einer Relationalen Datenbank darstellen lassen, da es hier viele Verbindungen zwischen den Daten gibt. Denn z.b die Instrumente wirst du immer wieder brauchen, ebenso wie die Künstler und Daten zu denen, da beides sehr oft vorkommen kann.

  • Wie zM4xi schon geschrieben hat, BASE64 ist eine Lösung, aber meiner Meinung nach keine schöne. Durch die Konvertierung von Dateiformaten (dazu gehören auch .pdf und alle Bilder) entsteht ein String der eine 1,5fache Größe des ursprünglichen Dokuments hat. Dies zieht Speicherplatz und performance. Sinnvoller wäre es die Datei, wie du schon die Idee hattest, in ein Dateisystem zu schieben und nur noch den Pfad in einer Datenbank zu speichern. Eine andere Alternative ist der Datentyp BLOB. Dieser ist dafür gedacht, Datei direkt in Datenbanken zu speichern. Hierbei hast du auch nicht mehr den unschönen Nachteil der 1,5fachen Speichergröße.


    Zur Filterung ist JSON auch eine Lösung, aber leider nicht wirklich performant, da die JSON immer wieder vom Programm encoded und decoded werden muss. Zudem werden sehr viele Daten doppelt auftreten, wie JD1992 schon sagte. Hier würde ich auf einzelne Bits setzten, die du in der Datenbank setzt. Diese kannst du dann mit den Bitwise Operatoren (&,|,^) wieder auslesen. Vorteil ist hier, dass du nur eine sehr kleine Datenmenge hast, die du speichern musst und das Auslesen und Auflösen sehr sehr performant ist.