How to model tags in the database?
Asked Answered
W

3

10

I have an existing webapp and want to add a tag feature so that users can tag existing objects. The question is should I add a tag column to each object? or should I normalize it and use a tag table where each object will have a collection of tags? I am leaning towards the latter because it feels cleaner, easier to report on and easier to create a tag cloud. But since I know this has been solved 1000 times I wanted to ask and see if I am missing something?

Weihs answered 25/8, 2009 at 17:54 Comment(0)
L
8

Do you foresee users needing to associate more than one tag with an object?

If not, add the TAG_ID fk to the OBJECT table. Otherwise, you'd need three tables in total to correctly model a many-to-many relationship:

OBJECT

  • OBJECT_ID (pk)

OBJECT_TAG_XREF

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

TAG

  • TAG_ID (pk)
Labyrinthine answered 25/8, 2009 at 18:5 Comment(2)
How would this change to tie tags to users? Would OBJECT_ID become USER_ID?Unitary
@JuniperAsh: You'd have to add a user_id column to OBJECT_TAG_XREF - same as the other two columns, primary key and foreign key to the users table.Labyrinthine
B
4

Yes, you should normalize it. The 'tag column' is either going to support only one tag per record, or is going to have hideous search performance.

Bigeye answered 25/8, 2009 at 17:57 Comment(0)
D
3

Definitely normalize. A table for tags, a table for your existing objects, and a table of links between them.

Donavon answered 25/8, 2009 at 18:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.