<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Baumstrukturen in einem RDBMS</title>
    <link>http://forum.geizhals.at/feed.jsp?id=182142</link>
    <description>Geizhals-Forum</description>
    <item>
      <title>Re(4): Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,999138.html#999138</link>
      <description>Hmm&amp;nbsp;&amp;nbsp;&lt;img src="frage.gif" width="16" height="26" align="absmiddle" alt="?-)"/&gt;&amp;nbsp;&amp;nbsp;ja schaut brauchbar aus!&amp;nbsp;&amp;nbsp;&lt;img src="smile.gif" width="16" height="19" align="absmiddle" alt=":-)"/&gt;&lt;br&gt;&lt;br&gt;Wenn ich das jetzt korrekt verstehe, wählst zuerst alle Vorfahren des fraglichen Eintrags aus; von diesen müßte derjenige der direkte 'Elter' sein, der den größten 'lft' oder eben den kleinsten 'rgt' Wert hat - sollte passen! (Zumindest wenn sich das 'LIMIT' nicht auf eventuelle interne Optimierungen der Abfrage auswirkt.)&lt;br&gt;&lt;br&gt;Wie schon gesagt, wennst in der Testphase die 'parentID' in den Datensätzen drin läßt, kannst in solchen Fällen auf Nummer sicher gehen; also die fargliche Abfrage bei einem 'ausgewachsenen Baum' automatisiert testen!&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Sun, 24 Aug 2003 18:13:17 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,999138.html#999138</guid>
      <dc:creator>mIstA</dc:creator>
      <dc:date>2003-08-24T18:13:17Z</dc:date>
    </item>
    <item>
      <title>Re(3): Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,998485.html#998485</link>
      <description>Also bisher habe ich das:&lt;br&gt;&lt;tt&gt;SELECT p1.id FROM posts AS p1, posts AS p2 WHERE p2.lft &gt; p1.lft AND p2.lft &amp;lt; p1.rgt AND p2.id = $id ORDER BY p1.rgt LIMIT 1&lt;/tt&gt;&lt;br&gt;&lt;br&gt;Wobei $id die ID des Eintrages ist, dessen parentid man haben will.&lt;br&gt;Ich habe es mit einigen Eintraegen ueberprueft, bin mir aber absolut nicht sicher, ob das so passt &lt;img src="frage.gif" width="16" height="26" align="absmiddle" alt="?-)"/&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Sat, 23 Aug 2003 23:48:14 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,998485.html#998485</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2003-08-23T23:48:14Z</dc:date>
    </item>
    <item>
      <title>Re(2): Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,998472.html#998472</link>
      <description>So, jetzt habe ich aber ein neues Problem. &lt;br&gt;Ich habe ja die Nested Sets verwendet - also kein Attribut àla parentid. Nur - wie komme ich jetzt an die parentid, wenn ich eine id habe? &lt;img src="frage.gif" width="16" height="26" align="absmiddle" alt="?-)"/&gt;&lt;br/&gt;</description>
      <pubDate>Sat, 23 Aug 2003 23:07:54 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,998472.html#998472</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2003-08-23T23:07:54Z</dc:date>
    </item>
    <item>
      <title>Re: Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,997772.html#997772</link>
      <description>Hi!&lt;br&gt;&lt;br&gt;Danke fuer Eure Antworten. Ich werde mich wohl doch noch mit den Nested Sets auseinandersetzen, sprich versuchen, sie wirklich zu verstehen.&lt;br&gt;Mit einem ordentlichen DBMS (Juhuu - gestern habe ich entdeckt, dass es jetzt einen - zwar nicht ganz aktuellen - native Windows-Port von PostgreSQL gibt!&lt;img src="smile.gif" width="16" height="19" align="absmiddle" alt=":)"/&gt;) macht, sollte die Performance auch halbwegs passen (statt 3-5 einzelne Queries abzusetzen, eine stored procedure)&lt;br&gt;&lt;br&gt;Gruss,&lt;br&gt;Psycho&lt;br/&gt;</description>
      <pubDate>Sat, 23 Aug 2003 12:31:51 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,997772.html#997772</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2003-08-23T12:31:51Z</dc:date>
    </item>
    <item>
      <title>Re: Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,997503.html#997503</link>
      <description>&lt;i&gt;ein Diskussionsforum, einen Verzeichnisbaum - was auch immer&lt;/i&gt;&lt;br&gt;&lt;br&gt;Ich würde mal behaupten, das genau diese Frage durchaus nicht so nebensächlich ist; ein Verzeichnisbaum ist nur ein Baum, ein Forum eher ein ganzer Wald.&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Die Nested-Set Methode schaut wirklich hochinteressant aus, muß ich sagen. Vollkommen verstanden hab ichs zwar beim ersten überfliegen auch noch nicht, aber Beispielquerys sind für alle wesentlichen Operationen vorhanden und schauen alle recht einfach aus. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Zusaetzlich zu ID und parentID wird ein Attribut level eingefuehrt.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Könnten es nicht auch 2 zusätzliche Attribute sein; eins nennen wir left und das andere right?&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Da sehe ich das erste Problem: Redundanz.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Darum wird bei den nested-sets die 'parentID' auch weggelassen, denn die alleine würde ja die Baumstruktur festlegen; aber eine gewisse Art Redundanz bleibt trotzdem noch, schließlich wird die Baumstruktur nun durch 2 Werte pro Knoten definiert, obwohl einer (parentID) ja reichen würde.&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;Aber diese Redundanz ist in dem Fall eben eher Nebensache, zumindest wenn man von z.B. 90% Lesezugriffe ausgeht; das ist der Preis dafür, daß wir den ganzen Baum fix-fertig sortiert und mit 'level' Angabe mit einer einzigen Query ermitteln können. Außerdem müssen sowieso besondere Vorkehrungen getroffen werden, um die Konsistenz der DB sicherzustellen.&lt;br&gt;&lt;br&gt;Insoferne könnte man in einer Test&amp;Experimentierphase ja auch die parentID zusätzlich im Datensatz lassen; dann wären die nested-sets eigentlich eine mögliche Umsetzung Deines Ansatzes, nämlich zusätzliche Attribute einführen, um den ganzen Baum in einem Rutsch abfragen zu können!&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&amp;nbsp;&amp;nbsp;&lt;img src="smile.gif" width="16" height="19" align="absmiddle" alt=":-)"/&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;Einfuegen von neuen Eintraegen relativ aufwendig und nicht wirklich performant.&lt;/i&gt;&lt;br&gt;&lt;br&gt;Das wird sicher nur dann zum Problem, wenn wenige Lesezugriffe auf eine Einfügeoperation kommen, denk ich.&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;&lt;br&gt;Wenn das Einfügen von Einträgen zum Performance-Problem wird, ließe sich dem vermutlich durch eine Art 'Einfügen auf Vorrat' kompensieren; der Aufwand mehrere Knoten einzufügen sollte nicht wesentlich höher sein als der für einen Knoten.&lt;br&gt;&lt;br&gt;Außerdem könnte man die Strukturdaten (rootID, nodeID, left, right) von den eigentlichen Nutzdaten (nodeID, payload) trennen und die ersteren in einer Tabelle ablegen, die im RAM gehalten wird, womit auch der Update-Aufwand gewaltig reduziert wird. Speichert man zusätzlich mit den Nutzdaten auch noch die parentID ab, dann kann diese Strukturdaten-Tabelle bei jedem Neustart frisch erzeugt werden. So hat man dann das Beste aus beiden Welten!&amp;nbsp;&amp;nbsp;&lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";-)"/&gt;&lt;br&gt;&lt;br/&gt;</description>
      <pubDate>Sat, 23 Aug 2003 06:04:12 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,997503.html#997503</guid>
      <dc:creator>mIstA</dc:creator>
      <dc:date>2003-08-23T06:04:12Z</dc:date>
    </item>
    <item>
      <title>Re(2): Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,997166.html#997166</link>
      <description>Naja, ich muesste mich einfach mehr damit beschaeftigen, mit den Nested Sets. Tu ich gern - nur nicht, wenn man mir morgen sagt, dass es anders viel einfacher und schneller auch noch geht &lt;img src="zwinker.gif" width="16" height="19" align="absmiddle" alt=";)"/&gt;&lt;br&gt;&lt;br&gt;Also ist mein.. ehm.. "Ansatz" mit parentid und level wohl nichts, richtig?&lt;br&gt;&lt;br&gt;Danke..!&lt;br/&gt;</description>
      <pubDate>Fri, 22 Aug 2003 18:43:16 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,997166.html#997166</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2003-08-22T18:43:16Z</dc:date>
    </item>
    <item>
      <title>Re: Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,995958.html#995958</link>
      <description>Was verstehst Du an den Nested Sets nicht?&lt;br&gt;&lt;br&gt;Weil, ganz ehrlich, es ist für derartige Tabellen in denen SEHR viel gelesen und SEHR wenig geschrieben wird die beste Lösung.&lt;br/&gt;</description>
      <pubDate>Fri, 22 Aug 2003 01:47:28 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,995958.html#995958</guid>
      <dc:creator>Fly</dc:creator>
      <dc:date>2003-08-22T01:47:28Z</dc:date>
    </item>
    <item>
      <title>Baumstrukturen in einem RDBMS</title>
      <link>http://forum.geizhals.at/t182142,995685.html#995685</link>
      <description>Hallo,&lt;br&gt;&lt;br&gt;Altbekanntes Problem: Man moechte eine Baumstruktur (Kategorien und Unterkategorien, ein Diskussionsforum, einen Verzeichnisbaum - was auch immer) moeglichst praktisch in einem RDBMS abbilden. Einiges habe auch schon gegoogled und gelesen, trotzdem noch fragen.&lt;br&gt;&lt;br&gt;Im grossen und ganzen scheint es zwei Ansaetze zu geben:&lt;ul&gt;&lt;li&gt;&lt;b&gt;Speichern mit parentID&lt;/b&gt;: D.h. jeder Eintrag hat eine eindeutige ID und weiters ein Attribut parentID, das auf die ID des uebergeordnetes Eintrages verweist. Eine Abfrage, in die richtige Reihenfolge wird das ganze dann mit der verwendeten Programmiersprache gebracht (Alternative dazu waere Rekursion, d.h. fuer jeden Eintrag eine eigene Abfrage =&gt; langsam). Beispiel: &lt;a href="http://selfaktuell.teamone.de/artikel/phpasp/php-forum/index.htm"&gt;Threadbasiertes Forum mit PHP und MySQL&lt;/a&gt;. &lt;br&gt;&lt;b&gt;Vorteile:&lt;/b&gt;&lt;ul/&gt;&lt;li/&gt;Einfache, auch fuer Nicht-Informatiker zu ueberblickende DB-Struktur.&lt;/li&gt;&lt;li&gt;Einfuegen von neuen Eintraegen schnell und einfach mit einer Anfrage.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Nachteile:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Braucht angeblich (lt. Google) relativ viel Speicher in der Programmiersprache.&lt;/li&gt;&lt;li&gt;Einwand von mir: Wieso sollte ich als Programmierer die ganze Sortierarbeit machen, die doch die RDBMS-Entwickler sicher viel besser koenn(t)en?&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Nested Sets&lt;/b&gt;: Dabei wird fuer jeden Eintrag &lt;tt&gt;left&lt;/tt&gt; und &lt;tt&gt;right&lt;/tt&gt; gespeichert. (Informatiker und aehnliche werden diese Baeume wohl gut kennen und verstehen, ich tu's nicht.). Beispiel: &lt;a href="http://www.develnet.org/36.html"&gt;Das 'Nested Sets' Modell - Bäume mit SQL&lt;/a&gt;. &lt;br&gt;&lt;b&gt;Vorteil:&lt;/b&gt;&lt;ul/&gt;&lt;li/&gt;Eine einfache Abfrage und das RDBMS liefert einem gleich das, was man haben will.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Nachteile:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Fuer Laien doch schwieriger zu verstehen (d.h. es koennen auch leichter Fehler passieren..)&lt;/li&gt;&lt;li&gt;Einfuegen von neuen Eintraegen relativ aufwendig und nicht wirklich performant.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;&lt;br&gt;So weit so gut. Jetzt frage ich mich aber, ob man es mit einer ggf. bisschen erweiterten Methode 1 nicht auch schaffen koennte, die Daten mehr oder weniger so vom RDBMS zu bekommen, wie man sie haben will: Zusaetzlich zu ID und parentID wird ein Attribut level eingefuehrt. Da drin steht einfach, "wie tief eingerueckt" der Eintrag ist. (Da sehe ich das erste Problem: Redundanz. Oder war es Nicht-Normalisierung?)&lt;br&gt;Das zweite Problem: Ich weiss dann schon nicht weiter... - aber ich frage mich halt, ob das nicht irgendwie moeglich waere &lt;img src="frage.gif" width="16" height="26" align="absmiddle" alt="?-)"/&gt;&lt;br&gt;&lt;br&gt;Danke sehr fuer's Lesen...!&lt;br&gt;Gruss,&lt;br&gt;Psycho&lt;small&gt;&lt;small/&gt;, der dafuer ist, dass der &lt;img src="frage.gif" width="16" height="26" align="absmiddle" alt="?-)"/&gt; Smiley (auch) mit :-? funktioniert. Waere doch passender. Wieso denn ein froehlich dreinschauender Mund, wenn man verzweifelt-ratlos ist?&lt;/small&gt;&lt;/small&gt;&lt;br/&gt;</description>
      <pubDate>Thu, 21 Aug 2003 19:08:38 GMT</pubDate>
      <guid>http://forum.geizhals.at/t182142,995685.html#995685</guid>
      <dc:creator>Psychopath</dc:creator>
      <dc:date>2003-08-21T19:08:38Z</dc:date>
    </item>
  </channel>
</rss>
