Hallo alle zusammen.
Ich kaue gerade auf der Frage herum, wie eine möglichst flexible DB-Grundstruktur eines kleinen CMS aussehen müßte. Folgendes habe ich mir überlegt:
Position und Hierarchieren der Einzelseiten werden über eine Baumstruktur festgelegt, in der jede Seite einfach nur ein Knoten ist. Dieser Baum existiert also einzig, um die Gesamtstruktur des Systems abzubilden. Ob der intern nun über Parent-Child-Modell oder eher Nested Sets realisiert wird, soll für die einzelnen Seiten keine Rolle spielen. Diese können dann nämlich davon unabhängig Artikel, Bildergalerie, Kontaktformulare, Kategorien (zum Gruppieren zusammengehöriger Seiten) oder sonstwas sein -- jede mit einer eigenen Funktionsweise und anderen Daten, die für den Betrieb wichtig sind. Für jeden dieser Typen gibt es in der DB also auch einen eigenen Typ von Tabelle, in der -- als kleinster gemeinsamer Nenner -- jeweils eine Knoten-ID gespeichert ist. Adressiert werden sollen die Seiten dann ausschließlich über diese Knoten-ID (z.B. innerhalb der Navigation).
Das find ich prinzipiell schonmal nicht verkehrt, allerdings stört mich etwas daran. An der Stelle, wo die zu einem Knoten gehörige Seite gefunden werden soll, muß ich quasi mit allen vorhandenen Typen von Seitentabellen vergleichen, ob ein Eintrag mit bestimmter Knoten-ID existiert. Das wird also ein ziemlich großer JOIN, in dem alle möglichen Tabellen vorkommen -- eben so viele, wie unterschiedliche Seitentypen existieren. Ich könnte die benötigte Query dynamisch aus allen "bekannten" Tabellennamen zusammensetzen, dann muß ich bei Ergänzungen neuer Seitentypen zumindest nicht die jedesmal von Hand die Query umschreiben. Trotzdem wächst bei solchen Ergänzungen dieses JOIN-Gebilde immer und immer weiter. Außerdem muß ja irgendwie vermerkt werden, in welcher Tabelle nun die gesuchte Knoten-ID gefunden wurde.
Das scheint mir insgesamt nicht so gut zu skalieren. Wie könnte man das System strukturieren, um dieses Problem zu vermeiden? Ist das Ganze vielleicht schon im Ansatz etwas unglücklich geraten?
Grüße von Alex