Andreas Lindig: richtige Datenhaltung

Hallo Forum,

ich will eine Mehrfachkategorisierung von Datensätzen ermöglichen. z.B:

<objekt>Auto</objekt>

kann in der Kategorie "Fahrzeuge" und in der Kategorie "Statussymbole" vorkommen. Jetzt könnte ich ja schreiben:

<objekt cat_1="Fahrzeuge" cat_2="Statussymbole">Auto</objekt>

nun soll die Ausgabe aber beizeiten auch nach Kategorien sortierbar sein. Also "zeige alle Objekte der Kategorie 1 oder der Kategorie 2...". Außerdem muß ich bei vielen Datensätzen irgendwann auch mal die XML-Datei in mehrere aufteilen, damit da nicht immer so ein riesen Wust geparst werden muß.

Nun die Frage zur Organisation der Daten:
----------------------------------------

1.
wenn ich die Dateien einfach auf z.B. 100 Datensätze begrenze, dann könnten doch in jeder Datei ein oder mehrere Datensätze mit dem Attribut cat_1="Fahrzeuge" vorkommen. Ich müßte also alle Dateien parsen, wenn ich alles zum Thema "Fahrzeuge" ausgeben will. Da kann ich auch gleich alles in einer Datei lassen.

2.
ich könnte aber auch in obigem Beispiel zwei XML-Dateien anlegen:

Fahrzeuge.xml
Statussymbole.xml

und bei der Ausgabe einfach nur die entsprechende Datei parsen. Aber die Datenhaltung ist dann ja redundant: der Datensatz "Auto" müßte in beiden Dateien stehen. Und wenn ich nach anderen Kriterien sortieren will, muß ich zusätzlich neue Dateien anlegen, z.B. nach Nummern:

1_99.xml
100_199.xml

das ist ja wie ein Karteikartensystem.

3.
ich könnte auch eine Vernüpfungstabelle anlegen:

cat           |  objekt
-----------------------
Fahrzeuge     |  Auto
Statussymbole |  Auto
Fahrzeuge     |  Skateboard

die Verknüpfung würde natürlich über entsprechende IDs gemacht und die Kategorien nochmal ausgelagert, hier nur der Lesbarkeit halber so.
Aber ist das nicht etwas Datenbankmäßig gedacht und daher nicht "XML-like"? Ist XML überhaupt für solche Sortieraufgaben geignet?

Gruß, Andreas

--
SELFFORUM - hier werden Sie geholfen,
auch in Fragen zu richtiges Deutsch
  1. Hi,

    kann in der Kategorie "Fahrzeuge" und in der Kategorie "Statussymbole" vorkommen.

    in beliebig vielen? Dann definiere ein <categories>-Element mit entsprechenden Unterelementen. Überlege Dir auch, die Kategorien zentral zu definieren und mit IDREF zu arbeiten.

    Außerdem muß ich bei vielen Datensätzen irgendwann auch mal die XML-Datei in mehrere aufteilen, damit da nicht immer so ein riesen Wust geparst werden muß.

    Wende Dich ggf. an Sven Groppe und Stefan Böttcher von der Uni Paderborn, die an/mit einem Verfahren arbeiten, XML vor einem komplexen Query auf das Wesentliche zu reduzieren.

    wenn ich die Dateien einfach auf z.B. 100 Datensätze begrenze,

    Nicht sinnvoll. Genauso wenig fängt man in Datenbanken plötzlich neue Tabellen an. Vielmehr arbeitet man dann mit einem Index.

    ich könnte aber auch in obigem Beispiel zwei XML-Dateien anlegen:

    I.d.R. auch nicht sinnvoll. Man arbeitet mit Beziehungen.

    ich könnte auch eine Vernüpfungstabelle anlegen:

    Bedingt sinnvoll. Die Verknüpfungen ergeben sich gewöhnlich aus den Daten.

    die Verknüpfung würde natürlich über entsprechende IDs gemacht und die Kategorien nochmal ausgelagert,

    Sinnvoll :-)

    Aber ist das nicht etwas Datenbankmäßig gedacht

    Jedes XML lässt sich zu einem DB-Schema umformen - die Ähnlichkeit ist frappierend. Wenn Du DB-mäßig denkst, kann das daraus resultierende XML so falsch nicht sein.

    Ist XML überhaupt für solche Sortieraufgaben geignet?

    Nein, das ist die umgebende Applikation ;-)

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Wenn Du DB-mäßig denkst, kann das daraus resultierende XML so falsch nicht sein.

      Dem möchte ich widersprechen.
      Das Ergebnis-XML solchen "DB-mäßigen Denkens" ist viel zu oft ein XML ohne Hierarchie, alles schön flach.
      Dann will man natürlich XSLT einsetzen und da geht schon die Gejammere loß, (weil man dann in/mit XSLT die fehlende Hierarchie aufzubauen/nachzubauen versucht) dass XSLT so kompliziert sei und ungeeignet usw. Dass das XML u.U. einfach Sche**** ist, weil es eben zu DB-mäßig ist, wird gerne übersehen.

      Grüße
      Thomas

      1. Hi,

        Dem möchte ich widersprechen.
        Das Ergebnis-XML solchen "DB-mäßigen Denkens" ist viel zu oft ein XML ohne Hierarchie, alles schön flach.

        okay, die Beziehungen sollten natürlich etwas mehr aufgelöst werden, als sie es in einer DB sind, also keine 1:1-Abbildung eines DB-Schemas. Da muss ich Dir Recht geben.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
    2. Hi,

      auch so,

      kann in der Kategorie "Fahrzeuge" und in der Kategorie "Statussymbole" vorkommen.

      in beliebig vielen?

      zunächst mal ja. Macht es einen Unterschied, ob beliebig viele oder z.B. höchstens 3?

      Dann definiere ein <categories>-Element mit entsprechenden Unterelementen.

      das sähe ja z.B. so aus:

      <objekt>
         <categories>
            <cat_1>Fahrzeuge</cat_1>
            <cat_2>Statussymbole</cat_2>
         </categories>
         <content>Auto</content>
      </objekt>

      wo ist da jetzt der Gewinn?

      IDREF

      watdatdenn? Oder heißt das ID-Referenzen und meint nichts anderes, als ich weiter unten im Vorposting schon beschrieb?

      Wende Dich ggf. an Sven Groppe und Stefan Böttcher von der Uni Paderborn, die an/mit einem Verfahren arbeiten, XML vor einem komplexen Query auf das Wesentliche zu reduzieren.

      ohje, so komliziert? Ich dachte, da gäb's schon einfache Lösungsansätze ;-)

      wenn ich die Dateien einfach auf z.B. 100 Datensätze begrenze,

      Nicht sinnvoll. Genauso wenig fängt man in Datenbanken plötzlich neue Tabellen an. Vielmehr arbeitet man dann mit einem Index.

      könntest Du da bitte mal ein praktisches Beispiel machen?

      ich könnte aber auch in obigem Beispiel zwei XML-Dateien anlegen:

      I.d.R. auch nicht sinnvoll. Man arbeitet mit Beziehungen.

      äh, ein konkretes Beispiel würde mir sehr helfen ;-) kennnst du den neudeutschen Ausdruck von den "praktisch Begabten"? - ich gehöre ab jetzt dazu ;-)

      Jedes XML lässt sich zu einem DB-Schema umformen - die Ähnlichkeit ist frappierend. Wenn Du DB-mäßig denkst, kann das daraus resultierende XML so falsch nicht sein.

      Ist XML überhaupt für solche Sortieraufgaben geignet?

      Nein, das ist die umgebende Applikation ;-)

      hehe, soll ich daraus jetzt Folgendes entnehmen?:
      das parsen des _gesamten_ Datenbestandes bleibt bei jeder Anfrage erhalten. Ggf. gibt's noch eine extra Datei mit den Kategorien und die Sortierung/Aussortierung erfolgt ausschließlich im Programm (Schleifen, Arrays etc.)?

      Gruß, Andreas

      --
      SELFFORUM - hier werden Sie geholfen,
      auch in Fragen zu richtiges Deutsch.
      1. Hi,

        kann in der Kategorie "Fahrzeuge" und in der Kategorie "Statussymbole" vorkommen.
        in beliebig vielen?
        zunächst mal ja. Macht es einen Unterschied, ob beliebig viele oder z.B. höchstens 3?

        ja, denn "höchstens 3" kann man mit Attributen abbilden, "beliebig viele" nicht.

        Dann definiere ein <categories>-Element mit entsprechenden Unterelementen.
        das sähe ja z.B. so aus:

        Nö. Ich korrigiere:

        <objekt>
           <categories>
              <category>Fahrzeuge</category>
              <category>Statussymbole</category>
           </categories>
           <content>Auto</content>
        </objekt>

        Jetzt klarer?

        IDREF
        watdatdenn?

        Referenz auf ein als ID gekennzeichnetes Attribut (bzw. das zugehörige Element, versteht sich). Das würde dann zu <category id="cat42"/> o.ä. führen, wobei "id" hier eine IDREF ist.

        Wende Dich ggf. an Sven Groppe und Stefan Böttcher von der Uni Paderborn, die an/mit einem Verfahren arbeiten, XML vor einem komplexen Query auf das Wesentliche zu reduzieren.
        ohje, so komliziert? Ich dachte, da gäb's schon einfache Lösungsansätze ;-)

        Der Lösungsansatz _ist_ einfach :-)

        Nicht sinnvoll. Genauso wenig fängt man in Datenbanken plötzlich neue Tabellen an. Vielmehr arbeitet man dann mit einem Index.
        könntest Du da bitte mal ein praktisches Beispiel machen?

        Für einen Index? Das wäre, wenn Du die Kategorien irgendwo zentral auflistest - also das, was Du mit IDREF machst.

        ich könnte aber auch in obigem Beispiel zwei XML-Dateien anlegen:
        I.d.R. auch nicht sinnvoll. Man arbeitet mit Beziehungen.
        äh, ein konkretes Beispiel würde mir sehr helfen ;-)

        Siehe oben ;-)

        kennnst du den neudeutschen Ausdruck von den "praktisch Begabten"? - ich gehöre ab jetzt dazu ;-)

        Hm, wieso fällt mir jetzt gerade der Spruch "Lieber heimlich schlau als unheimlich doof." ein? ;-)

        das parsen des _gesamten_ Datenbestandes bleibt bei jeder Anfrage erhalten.

        Ja. Wobei Du je nach Datenbestand eine andere Form des Parsens wählen wirst.

        Ggf. gibt's noch eine extra Datei mit den Kategorien

        Das wäre beispielsweise ein Gedanke.

        und die Sortierung/Aussortierung erfolgt ausschließlich im Programm (Schleifen, Arrays etc.)?

        XSLT bzw. XPath oder XQuery fehlen noch :-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Nö. Ich korrigiere:

          <objekt>
             <categories>
                <category>Fahrzeuge</category>
                <category>Statussymbole</category>
             </categories>
             <content>Auto</content>
          </objekt>

          Jetzt klarer?

          hm... da muss ich ja meinem XML-Parser ganz neue Sitten beibringen. Bisher schreibt er brav tag für tag in die einzulesende Struktur, und wenn sich ein Tag wiederholt, dann überschreibt er den Wert von einer Zeile vorher halt.

          könntest Du da bitte mal ein praktisches Beispiel machen?

          Für einen Index? Das wäre, wenn Du die Kategorien irgendwo zentral auflistest - also das, was Du mit IDREF machst.

          also Beispiel:

          <objekt>
             <categories>
                <category  id="1"></category>
                <category id="2"></category>
             </categories>
             <content>Auto</content>
          </objekt>

          oder

          <objekt>
             <categories>
                <category id="1"/>
                <category id="2"/>
             </categories>
             <content>Auto</content>
          </objekt>

          ?
          bei Ersterem würde mich ja jetzt wundern, daß da keine Werte im jeweiligen Datenbereich stehen.

          gut, und dann eine Datei "sortierung.xml":

          <sortierung>

          <categories>
                <category id="1">Fahrzeuge</category>
                <category id="2">Statussymbole</category>
             </categories>

          <colors>
                <color id="1">#ff0000</color>
                <color id="2">#00ff00</color>
             </colors>

          </sortierung>

          kennnst du den neudeutschen Ausdruck von den "praktisch Begabten"? - ich gehöre ab jetzt dazu ;-)

          Hm, wieso fällt mir jetzt gerade der Spruch "Lieber heimlich schlau als unheimlich doof." ein? ;-)

          keine Ahnung, du ;-)

          XSLT bzw. XPath oder XQuery fehlen noch :-)

          bleib mir mit dem Kram wech ;-) wenn das Projekt fertig ist, nur noch Datenbank - nie wieder XML!

          Gruß, Andreas

          --
          SELFFORUM - hier werden Sie geholfen,
          auch in Fragen zu richtiges Deutsch