Hi Andi,
ich verstehe dein Problem folgendermaßen:
|Menü 1
\> Punkt 1
\> Punkt 2
\> Punkt 3
|Untermenü 3
\> Punkt 3.1
\> Punkt 3.2
|Untermenü 3.2
\> Punkt 3.2.1
\> Punkt 4
Es handelt sich also um einen nicht binären Baum.
Diesen möchtest du in einer DB verwalten?
Du könntest alle Einträge flat in eine Tabelle schreiben, also Ordnung des Eintrags (entspricht der 1.2.3.4-Notation), angezeigter Wert, URL.
Beim Aufbau des Menüs müsste dann dein Parser anhand der Ordnung des Eintrags deine Menüstruktur bestimmen.
Bei relativ kleinen Bäumen würde dies bestimmt ausreichen, aber bei größeren könnte es da schon zu Komplikationen kommen.
Eine andere Möglichkeit ist die, dass du dir den Baum selbst aufbaust.
Für jede Ordnung in der Hierarchie, also jede Ebene in deinem Baum, wird eine Tabelle erzeugt.
Jede Tabelle ist so aufgebaut:
- Id (primary key)
- Eintrag
- URL
- Vater-Knoten (foreign key)
Bei deiner ersten Tabelle, also der Wurzel des Baumes, ist bei allen Einträgen der Vaterknoten die NULL oder ein eindeutiger Wert für die Wurzel.
Ein kleiner Auszug zum Verständnis:
Menüstruktur (als Baum):
Wurzel
/ / | \ \
1 2 3 4 5
/ | \
3.1 3.2 3.3
/ \
3.3.1 3.3.2
Du benötigst also 3 Tabellen:
Tabelle 1:
Id | Eintrag | URL | Vater
1 Punkt 1 - Wurzel
2 Punkt 2 - Wurzel
3 Punkt 3 - Wurzel
4 Punkt 4 - Wurzel
5 Punkt 5 - Wurzel
Tabelle 2:
Id | Eintrag | URL | Vater
1 Punkt 3.1 - 3
2 Punkt 3.2 - 3
3 Punkt 3.3 - 3
Tabelle 3:
Id | Eintrag | URL | Vater
1 Punkt 3.3.1 - 3
2 Punkt 3.3.2 - 3
Dabei bezieht sich der Vater-Knoten immer auf die Tabelle n-1, also die nächst höher gelegene Ebene.
Dies sollte bei der Verwendung von echten foreign keys schon bei der Erzeugung beachtet werden.
Bei MySQL, wo ja standardmäßig keine echten Verknüpfungen erzeugt werden, kann man dies ja beim Auslesen beeinflussen.
Ich würde jedoch eine solche Struktur generell in einem XML-Dokument ablegen, da man hier mit einem Parser bestimmt einfach umgehen kann, als eine ziemlich aufwändige Datenbank-Struktur zu designen, die dann auch noch dynamisch sein soll…
Hilft dir das weiter?
Ciao, Bill