Electronix: Tags speichern

Hallo,

ich habe ein kleines Problem, ich weiß nämlich nicht, wie ich am besten Tags in einer Datenbank speichern soll.

Also, folgende Situation:

Ich möchte ein kleines Photoalbum-Script erstellen, so könnte mein DB-Design aussehen:

Tabelle albums
Spalten id, name

Tabelle photos
Spalten id, name, album (foreignKey zu albums.id)

Nun möchte ich aber auch noch, dass die Alben und Photos "getaggt", also mit Stichwörtern versehen werden können.

Nun meine Frage: Wie soll ich diese Tags am besten in der Datenbank speichern?
Soll ich beiden Tabellen eine neue Spalte hinzufügen, in der ich die Tags mit Kommata getrennt speichere, oder soll ich drei neue Tabellen anlegen?

Tabelle tags
Spalten id, tag

Tabelle albumtags
Spalten tagID, albumID

Tabelle phototags
Spalten tagID, photoID

Welche der beiden Varianten würdet ihr nehmen, oder würdet ihr das noch ganz anders machen.

Ich hoffe, ihr könnt mir hier helfen, ich weiß nicht, wie ich dass am besten machen soll.

Mit freundlichen Grüßem,

Electronix

  1. Welche der beiden Varianten würdet ihr nehmen, oder würdet ihr das noch ganz anders machen.

    Du hast zwei möglichkeiten: entweder du nutzt in der Tat eine Kommaseparierte Liste - die Tags findest du dann durch FIND_IN_SET()

    Oder aber du legst _eine_ weiter Tabelle für die Tags an - diese Tabelle bekommt ein zusätzliches Feld welches die Zuordnung zu Alben/Fotos enthält.

    Variante 1 führt zum schnellen Erfolg, ist einfach umzusetzen (auch in puncto Wartung der Tags einzelner einträge) führt aber auf lange sicht zu Problemen.

    Variante 2 ist teilweise recht kompliziert umzusetzen, erlaubt aber durch eine saubere und normalisierte Struktur einen ordentlichen Zugriff auf die Daten.

    Empfehlung: Variante 2

    1. Hi,

      Variante 2 ist teilweise recht kompliziert umzusetzen, erlaubt aber durch eine saubere und normalisierte Struktur einen ordentlichen Zugriff auf die Daten.

      Aber wenn ich doch nur _eine_ Tabelle habe, dann werden doch pro Tag mehrere Datensätze, nämlich einer pro Album und Foto, dann habe ich aber doch immer mehrere Einträge pro Tag.

      Jetzt bin ich verwirrt

      1. Aber wenn ich doch nur _eine_ Tabelle habe, dann werden doch pro Tag mehrere Datensätze, nämlich einer pro Album und Foto, dann habe ich aber doch immer mehrere Einträge pro Tag.

        Das könntest du zusätzlich durch eine Worteliste-Tabelle korrigiere und in der Tag-Tabelle nur die ID des Tags angeben und auf die Worteliste-Tabelle joinen.

        Das ist die _ganz schöne_ Variante und erlaubt ein schnelles Umbenennen von Tags ohne "performanceintensive" Abfragen.

        Imho ist das aber schon etwas übertrieben.

        1. Ok, vielen Dank,

          dann werde ich einfach eine Tabelle mit den Tags anlegen.