Ich bin momentan dabei an einem CMS zu arbeiten bzw. zu planen. Dabei soll eine Seite so erstellt werden, dass sie aus mehreren Contentelementen besteht. Zum Beispiel soll es Elemente für reinen Text, Bild, Überschrift, Bildliste etc. geben. Bei der Umsetzung für die Datenbank bin ich mir jedoch nicht sicher welche Möglichkeit da am besten geeigenet ist. Zur Zeit habe ich 3-4 Möglichkeiten angedacht:
Möglichkeit 1:
Jeder Content-Element-Typ bekommt eine eigene Tabelle mit den entsprechenden benötigten Spalten. Vom Datenbankdesign an sich bestimmt die beste Variante. Jedoch tritt hier das Problem beim Auslesen der Daten auf. Man müsste jeden Content-Element mit einem eigenen Query auslesen. Bei einer Seite mit vielleicht 7-10 verschiedenen Elementen bestimmt nicht so gut.
Möglichkeit 2:
Man könnte die Möglichkeit 1 auch so umändern, dass man mit einem Query alle verschiedenen Contentelementstabellen miteinander verknüpft und somit die Daten ausliest. Hierbei frage ich mich jedoch, ob das für die Datenbank nicht tötlich sein könnte so ein Query zu bewältigen. Dann ist es auch noch fraglich wie es bei komplexeren Strukturen aussieht, wo für ein Element mehrere Daten aus verschiedenen Tabellen geholt werden.
Möglichkeit 3:
Man legt in einer Tabelle viele Spalten an, die eventuell von einem Content-Element genutzt werden könnten. Das hat aber zur Folge, dass viele Spalten leer blieben. Diese Lösung wird, wie ich mit bekommen habe, von einigen bestehenden Content Management Systemen benutzt. Bei mir sträubt es sich aber wegen dem unsauberen DB-Design vor dieser Möglichkeit.
Möglichkeit 4:
Diese Idee kam mir während des Schreibens hier. In der Content-Elementtabelle wird jediglich eine Spalte angelegt. In dieser Spalte wird jetzt nicht der eigentliche Inhalt gespeichert, sondern ein serialisiertes Objekt, welches alle benötigten Informationen beinhaltet.
Mich interessiert nun, wie ihr ein ähnliches Problem gelöst habt oder welchen Lösungsansatz ihr für am sinnvollsten haltet.
Möglichkeit 1:
Jeder Content-Element-Typ bekommt eine eigene Tabelle mit den entsprechenden benötigten Spalten. Vom Datenbankdesign an sich bestimmt die beste Variante. Jedoch tritt hier das Problem beim Auslesen der Daten auf. Man müsste jeden Content-Element mit einem eigenen Query auslesen. Bei einer Seite mit vielleicht 7-10 verschiedenen Elementen bestimmt nicht so gut.
Möglichkeit 2:
Man könnte die Möglichkeit 1 auch so umändern, dass man mit einem Query alle verschiedenen Contentelementstabellen miteinander verknüpft und somit die Daten ausliest. Hierbei frage ich mich jedoch, ob das für die Datenbank nicht tötlich sein könnte so ein Query zu bewältigen. Dann ist es auch noch fraglich wie es bei komplexeren Strukturen aussieht, wo für ein Element mehrere Daten aus verschiedenen Tabellen geholt werden.
Möglichkeit 3:
Man legt in einer Tabelle viele Spalten an, die eventuell von einem Content-Element genutzt werden könnten. Das hat aber zur Folge, dass viele Spalten leer blieben. Diese Lösung wird, wie ich mit bekommen habe, von einigen bestehenden Content Management Systemen benutzt. Bei mir sträubt es sich aber wegen dem unsauberen DB-Design vor dieser Möglichkeit.
Möglichkeit 4:
Diese Idee kam mir während des Schreibens hier. In der Content-Elementtabelle wird jediglich eine Spalte angelegt. In dieser Spalte wird jetzt nicht der eigentliche Inhalt gespeichert, sondern ein serialisiertes Objekt, welches alle benötigten Informationen beinhaltet.
Mich interessiert nun, wie ihr ein ähnliches Problem gelöst habt oder welchen Lösungsansatz ihr für am sinnvollsten haltet.
Kommentar