Baumstruktur abfragen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Dienstag 28. Oktober 2008, 12:21

Hi ihr lieben leute,

ich habe eine Tabelle in welcher sich Daten in einer Baumstruktur befinden...
wobei jedes Node mit einem Feld parent_id an sein "Elternelement" gehaengt ist.

Nun meine Frage... kann man alle Kinder, Kindeskinder und so weiter einer speziellen Node irgendwie mit moeglichst einer SQL abfrage erhalten... so wie es sich fuer mich momentan darlegt muss man nen Haufen SQL statements raushauen um das hinzubekommen...

oder gibts da im Allgemeinen nen anderen weg wie man das ganze loesen kann/sollte ... evl. ne andere Datenbank engine?

Momentan Arbeite ich mit relationalen Datenbank engines wie MySQL, SQLite da es sich um eine Webanwendung handelt... allerdings stand ich bis jetzt noch nie vor so einem Problem...

Waehre nett wenn sich jemand dazu Aeussern koennte..

Grusse Zero-one
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Dienstag 28. Oktober 2008, 13:11

Speicher den Baum lieber als Nested Set.

Hab hier auch ein ganz netter Tutorial gefunden: http://www.klempert.de/nested_sets/
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Dienstag 28. Oktober 2008, 15:26

ist es bei Nested Sets nicht so das dort jeder Node nur 2 Childs haben kann?
Ich braeuchte etwas wo jedes Node eine unbegrenzte Anzahl Childs enthalten kann...

Gruessle
Zuletzt geändert von zero-one am Dienstag 28. Oktober 2008, 15:35, insgesamt 1-mal geändert.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Dienstag 28. Oktober 2008, 15:32

Klingt für nach einer hierarchischen Datenstruktur wie z.B. XML.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 28. Oktober 2008, 15:42

Siehe auch XML-Datenbanken in der Wikipedia.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
zero-one
User
Beiträge: 58
Registriert: Dienstag 20. Mai 2008, 20:52

Dienstag 28. Oktober 2008, 15:45

Naja dort ist bei Nachteilen Performance aufgefuehrt... hat schon mal jemand hier was damit gemacht?

Wie verhalten sich die XML-Datenbanken bei groesseren Datenmengen... XML produziert da ja schon bissle was an Overhead...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Dienstag 28. Oktober 2008, 16:48

Hier noch ein toller Link von der MySQL-Doku: Managing Hierarchical Data in MySQL
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Dienstag 28. Oktober 2008, 16:54

zero-one hat geschrieben:ist es bei Nested Sets nicht so das dort jeder Node nur 2 Childs haben kann?
Nein, jeder Node kann beliebig viele Kinder haben
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 29. Oktober 2008, 09:23

zero-one hat geschrieben:Naja dort ist bei Nachteilen Performance aufgefuehrt... hat schon mal jemand hier was damit gemacht?

Wie verhalten sich die XML-Datenbanken bei groesseren Datenmengen... XML produziert da ja schon bissle was an Overhead...
Du darfst nicht die textuelle Repräsentation mit dem logischen XML-InfoSet verwechseln. Niemand zwingt den Anbieter einer XML-Datenbank, die Daten in textueller Form zu verwalten. Will man jedoch XPath als Abfragesprache einsetzen (wie z.B. XQuery es macht), muss es einen DOM geben und diesen muss man traversieren können, was direkte Zugriffe über einen Index schwer oder unmöglich und damit langsamer macht.

Da aber letztlich das XML-Infoset auch nur aus Elementen mit Attributen und Text besteht, die man z.B. als Objekte in einer OO-Datenbank halten kann, könnte ich mir vorstellen, dass man da Dokumente im Terrabyte-Bereich ohne größere Probleme in einer OO-Datenbank wie Gemstone ablegen kann. Wahrscheinlich kann Oracle da aber auch mit seinem XML-Support mithalten... da kenne ich mich nicht so gut aus.

Stefan
Antworten