Hallo,
ich habe eine Frage zur Abbildung von einer Artikel-Struktur in einer DB-Tabelle (falls es relevant ist: MySql).
Im späteren sicherlich.
Die Struktur erfordert eine eindeutige Reihenfolge für jede Ebene.
Es gibt n-Ebenen.
Jeder Artikel hat einen Namen und die Ebene ist bekannt, Namen können mehrmals auftauchen (ein Artikel über Klima kann unter verschiedenen Länderkategorien vorhanden sein).
Du willst also von mehreren Stellen auf dasselbe Objekt verweisen?
- von unterschiedlichen Ebenen und Zweigen
- gleiche Ebene aber verschiedene Zweige
Das ganze soll möglichst effizient sein.
Das ist relativ und kann nicht pauschal beantwortet werden.
Auch zu beachten folgende Anforderung:
Zum Aufbau der Menüführung müssen leicht alle Ebenen geöffnet bis zum Aktuellen Artikel und dessen direkte Unterkategorie "ausgeklappt" ermittelbar sein.
Eine Datenbank kennt kein "ausklappen". Das ist Frontend-Logik (Bereich View vom MVC).
Bisjetzt habe ich folgende 3 Möglichkeiten, mit ihren Vor- und Nachteilen:
- NestedSets: schneller lesender Zugriff, eindeutige Reihenfolge, komplizierter manipulierender Zugriff
Ja, wäge doch mal ab, was öfter vorkommt. Wieviel manipulierende Operationen hast du? Was vielleicht ein Schwachpunkt ist, es muss immer den gesamten Baum updaten. Bei 100'000 Datensätzen könnte das dann schon was ausmachen. Von wieviel Datensätzen reden wir?
In NestedSets würde ich die Payload-Daten, also die echten Nutzdaten so gering wie möglich halten, z.b. nur eine ID, welche den "Artikel" eindeutig identifiziert. Dies hält das Datenvolumen klein.
- Pfad speichern z.B. 1.3.4.5.2: Reihenfolge nur schwerlich festzulegen
Was machst du bei 1.3.4.5.3.2.5? Ist die 3 an 2. Stelle dieselbe 3 wie an 5. Stelle?
Für Abfrage der Menüführung recht komfortabel.
Ah ... ja?
Geschwindigkeitsproblem?
Was verleitet dich zu dieser Annahme?
- id/parent-id: rekursive mehrfache Abfragen notwendig, zusätzliche Spalte für Reihenfolge
Sicherlich eine gangbare Alternative.
Abfragen relativ simpel.
Woher stammt deine Ansicht? Was für Abfragen? Was ist mit "Gib alles was auf Ebene 5 ist"? ... Ebene 5 ist eine Element was auf ein Elternelement, welches auf ein Elternelement, welches auf ein Elternelement, welches auf ein Elternelement ohne Elternelement verweist. Wie willst du das in einer einzigen Abfrage machen?
Gruss, Frank