How to deal with data repetition?
Probably this question is more suitable for StackOverflow ;-)
Anyway: a combination of the two approaches is what I'd use: the User has a small research tool that displays the tags that contains the word (or a part of the word) User is inserting. If a tag already exists the User can select that tag. If a tag doesn't exist, the new tag will be manually approved by a &quot;superuser&quot;.
I think this looks like the same approach used in StackOverflow (and in all forums of Stack Exchange)