CCK Felder mehrfach verwenden
Bei einem CCK Feld besteht die Möglichkeit, dieses mehrfach zu verwenden. Dies hat jedoch Auswirkungen auf die daruntreliegende Datenbankstruktur. Je nach dem, wo die Schwerpunkte einer Seite liegen und was man abbilden will, ist das eine bzw. das andere besser. Daher sollte diese Entscheidung stehts bewusst durchgeführt werden.
Beispiel: Ein Inhaltstyp "image". Dieser besteht aus einem Feld field_fotograph (textfield), field_legende (textfield) und field_image (imagefield). Bei allen Feldern ist die Kardinalität auf 1 gesetzt (sprich nur 1 Wert pro Feld zulässig).
Das Datenbankschema sieht wie folgt aus:
Tabelle content_type_image
----------------------------------------------------------------------------------------------------------
| vid | nid | field_fotograph_value | field_legende_value | field_image_fid | field_image_list | field_image_data |
----------------------------------------------------------------------------------------------------------
Fazit: Sehr kompakt.
Sobald jetzt aber entweder ein Feld mehrfach verwendet wird, bzw. die Kardinalität > 1 gesetzt wird, dann wird die entsprechende Spalte in eine eigene Tabelle ausgelagert (damit sie auch mehrfach verwendet werden kann):
Tabelle content_type_image
----------------------------------------------------------------------------------------------------
| vid | nid | field_legende_value | field_image_fid | field_image_list | field_image_data |
----------------------------------------------------------------------------------------------------
Und zusätzlich die Tabelle content_field_fotograph
--------------------------------------------
| vid | nid | delta | field_fotograph_value |
--------------------------------------------
Daraus lassen sich relativ schnell die Vorteile ableiten
Geht es rein um die Performance, dann ist sicher die 1. Variante die schnellere, da kein Join durchgeführt werden muss, um an die Daten zu gelangen. Das Datenmodell bleibt zudem übersichtlicher, da alle Daten zu einem Node in einer Tabelle sind.
Variante 2 hat den Vorteil, dass wenn eine Views gemacht wird, welche auf das gleiche Feld von zwei verschiedenen Nodetypen zugreift, dies ohne weiteres möglich ist. Beispiel: Inhaltstyp A hat ein Feld field_legende_1 und Inhaltstyp B hat ein Feld field_legende_2. Jetzt soll eine tabellarische Views gemacht werden, welche die Legende aller Nodes des Typs A und B auflistet. Einfach so wird das nicht möglich sein, da beide Felder angewählt werden müssen, je nach Typ jedoch immer eines leer ist.
Weiter liegt hier der Vorteil, dass mehrfach verwendete Felder beim Themen Nodetypeübergreifend gleich behandelt werden können. Beispiel: Imagefield Feld, welches in zwei Nodetypen verwendet wird. Es gibt zwei Views, welche die Bilder galeriemässig auflisten. Der Markup wird über ein tpl entsprechend angepasst. Es kann das entsprechende tpl überschrieben werden, welches dann in allen Views genommen wird und muss nicht für beide Felder das gleiche tpl (nur der Name, der anders ist) anlegen.
Fazit
Eine Generalisierung ist nicht möglich, aber eine Faustregel: Falls verschiedene Inhaltstypen aus identischen Feldern bestehen (sowohl thematisch, wie auch strukturell), dann ist definitiv Mehrfachverwendung angesagt. Alle anderen Fälle müssen entsprechend abgewogen werden.
Weiterführende Links
http://groups.drupal.org/node/3069
http://groups.drupal.org/node/17433
- Anmelden oder Registrieren um Kommentare zu schreiben
Neue Kommentare
vor 14 Stunden 8 Minuten
vor 1 Tag 12 Stunden
vor 3 Tagen 7 Stunden
vor 3 Tagen 13 Stunden
vor 3 Tagen 15 Stunden
vor 4 Tagen 3 Stunden
vor 4 Tagen 5 Stunden
vor 4 Tagen 6 Stunden
vor 4 Tagen 6 Stunden
vor 4 Tagen 6 Stunden