Table with N associations Suppose I have three tables: meta_tags, users, posts. (just an example)

Users and Posts both could have tags, so my meta_tags table could be structured like

 meta_tags
   - user_id
   - post_id
   - tag


But, I want my meta_tags table to be extendable. If I later create an item table that could also have a tag, I'd need to adjust my meta_tag table with a new _id column. 

Would it be better to instead format my meta_tags table like

 meta_tags
   - thing_id
   - thing_type
   - tag


so that my query would be

 SELECT tag FROM meta_tags WHERE thing_id = 1 AND thing_type = "user";


vs

 SELECT tag FROM meta_tags WHERE user_id = 1;


or, maybe I should have separate tables? user_tags, post_tags, etc..

I guess my question is...which way is considered best practice? Are their significant performance impacts I should be aware of?
A way to resolve this would be to put the joining of things with tags into separate tables.  You would have your original tables users, posts, meta-tags and perhaps items.  In addition, you would have user-tags, post-tags, and perhaps item-tags.  The later three tables would only have the keys from the specific type table (e.g. user_id) and the key from the meta-tags table.

This design would also allow you to have other attributes to a tag that apply across all the base tables.