2009-08-25 17 views
9

Tengo una aplicación web existente y quiero agregar una función de etiqueta para que los usuarios puedan etiquetar los objetos existentes. La pregunta es si debo agregar una columna de etiqueta a cada objeto. o debería normalizarlo y usar una tabla de etiquetas donde cada objeto tendrá una colección de etiquetas? Me inclino por este último porque se siente más limpio, más fácil de informar y más fácil de crear una nube de etiquetas. Pero como sé que esto se ha resuelto 1000 veces, quería preguntar y ver si me falta algo.¿Cómo se modelan las etiquetas en la base de datos?

Respuesta

6

¿Prevé que los usuarios necesiten asociar más de una etiqueta con un objeto?

Si no, agregue el TAG_ID a la tabla OBJETO. De lo contrario, se necesitaría tres mesas en total para modelar correctamente una relación muchos-a-muchos relación:

OBJETO

  • OBJECT_ID (pk)

OBJECT_TAG_XREF

  • OBJECT_ID (pk, fk a OBJETO)
  • TAG_ID (pk, fk a TAG)

TAG

  • tag_id (pk)
+0

¿Cómo este cambio para atar etiquetas a los usuarios? ¿OBJECT_ID se convertiría en USER_ID? –

+1

@JuniperAsh: Debería agregar una columna 'user_id' a' OBJECT_TAG_XREF', igual que las otras dos columnas, clave principal y clave externa a la tabla de usuarios. –

+0

¡Tiene mucho más sentido! ¡Gracias! –

4

Sí, deberías normalizarlo. La 'columna de etiquetas' admite solo una etiqueta por registro o tendrá un rendimiento de búsqueda horrible.

2

Definitivamente normalizar. Una tabla para etiquetas, una tabla para sus objetos existentes y una tabla de enlaces entre ellos.

Cuestiones relacionadas