"Lückenfüller-Einträge"
Angelina
- datenbank
1 Blaubart
Guten Abend.
(MySQL4)
In meiner Datenbank habe ich in einem Feld namens "kategorie" (und "ebene") Inhalte wie:
(Kategorie:) Hauptkategorie1 (Ebene:0)
Hauptkategorie1|Kategorie1 (1)
Hauptkategorie1|Kategorie1|Unterkategorie1 (2)
...
Das Script liest die Kategorien später aus und generiert ein schönes Navigationsmenü daraus. Anhand von der Ebene kann auch bequem die Auswahl der anzuzeigenden Elemente der Navigation angesteuert werden.
Soweit, sogut.
Nun kommt es allerdings zu einem Problem, wenn z.b. nur folgende als Datensatz vorliegen:
Hauptkategorie1 (0)
Hauptkategorie1|Kategorie1|Unterkategorie1 (2)
d.h. dieser fehlt:
Hauptkategorie1|Kategorie1 (1)
dabei kommt das script durcheinander und kann nach Auswahl von Hauptkategorie1 keine Unterpunkte zuordnen, da gar keine Ebene#1 existiert.
Auch wenn man das Script sicher ändern könnte,
suche ich nach einem weg, wie man die "fehlenden Teile" nachträglich erzeugen lassen kann mit einem geschickten Mysql-Query.
Würde mich sehr über einen brauchbaren Hinweis freuen.
Danke schonmal.
Grüße
'Nabend Angelina.
Abgesehen davon, daß ich...
(Kategorie:) Hauptkategorie1 (Ebene:0)
Hauptkategorie1|Kategorie1 (1)
Hauptkategorie1|Kategorie1|Unterkategorie1 (2)
... für ziemlich schlechtes Datenbankdesign halte, verstehe ich dein Problem nicht so recht. Wenn die Datenbank nicht "weiß", welche Kategorien es gibt, wer soll es dann wissen und somit ggf. ergänzen? An irgendeiner Stelle muß das doch verbindlich festgelegt worden sein.
Wichtiger ist es meiner Meinung nach, zu verhindern, daß andere Programme oder Programmteile diese Informationen aus der Datenbank löschen bzw. bloß solche lückenhaften Informationen einfügen!
Zum Datenbankdesign:
Wenn ich dein Beispiel richtig deute, speicherst du den kompletten Pfad einer Kategorie vom Root aus als Zeichenkette in der Datenbank. Damit erzeugst du unnötigerweise redundante Daten. Außerdem führst es zu Problemen, z.B. wenn du eine Kategorie umbenennen oder verschieben möchtest. Statt dessen würde ich dir ein Eltern-Kind-Modell vorschlagen: Jede Kategorie wird in der Datenbank dargestellt durch einen Namen, eine ID und die ID der Elternkategorie.
Falls sich deine Menüstruktur nicht so häufig ändert, d.h. die meiste Zeit über _lesend_ darauf zugegriffen wird, kann ich dir Nested Sets als Alternative ans Herz legen. Damit lassen sich Baumstrukturen sehr elegant darstellen und mit Queries aus der Datenbank holen. :)