2009-08-25 15 views
9

Ich habe eine vorhandene Webanwendung und möchte ein Tag-Feature hinzufügen, damit Benutzer vorhandene Objekte kennzeichnen können. Die Frage ist, sollte ich eine Tag-Spalte zu jedem Objekt hinzufügen? oder sollte ich es normalisieren und eine Tag-Tabelle verwenden, wo jedes Objekt eine Sammlung von Tags hat? Ich lehne mich dem Letzteren an, weil es sich sauberer anfühlt, leichter zu berichten und leichter eine Tag Cloud zu erstellen. Aber da ich weiß, dass das 1000 Mal gelöst wurde, wollte ich fragen und sehen, ob mir etwas fehlt.Wie werden Tags in der Datenbank modelliert?

Antwort

6

Erwarten Sie, dass Benutzer mehr als ein Tag mit einem Objekt verknüpfen müssen?

Wenn nicht ist, fügen Sie die TAG_ID fk zur OBJEKT-Tabelle hinzu. Andernfalls würden Sie drei Tabellen insgesamt müssen richtig ein modellieren many-to-many-Beziehung:

OBJECT

  • OBJECT_ID (pk)

OBJECT_TAG_XREF

  • OBJECT_ID (pk, fk zu OBJECT)
  • TAG_ID (pk, fk zu TAG)

TAG

  • TAG_ID (pk)
+0

Wie diese Änderung Tags Benutzer binden würde? Würde OBJECT_ID zu USER_ID werden? –

+1

@JuniperAsh: Sie müssten 'OBJECT_TAG_XREF' eine' user_id'-Spalte hinzufügen - genauso wie die anderen beiden Spalten, Primärschlüssel und Fremdschlüssel für die Benutzertabelle. –

+0

Macht viel mehr Sinn! Vielen Dank! –

4

Ja, Sie sollten es normalisieren. Die 'Tag-Spalte' wird entweder nur ein Tag pro Datensatz unterstützen oder eine schreckliche Suchleistung haben.

2

Definitiv normalisieren. Eine Tabelle für Tags, eine Tabelle für Ihre vorhandenen Objekte und eine Tabelle mit Links zwischen ihnen.

Verwandte Themen