Consider these 3 table structures. Which will perform these queries the best.
Structure 1 - TagID as int with a join table
Article
-------
ArticleID int
Article_Tag
------------
ArticleTagID int
ArticleID int
TagID int
Tag
---
TagID int
TagText varchar(50)
Structure 2 - Tags only in Join table as string
Article
-------
articleID int
Article_Tag
-----------
articleTagID int
articleID int
tag varchar(50)
Structure 3 - Tag as text as the PK
Article
-------
ArticleID int
Article_Tag
------------
ArticleTagID int
ArticleID int
Tag varchar(50)
Tag
---
Tag varchar(50)
Sample queries:
Select articleID from Article a inner join Article_tag at on a.articleID = at.articleID and tag = 'apple'
Select tag from Tags -- or, for structure 2
Select distinct tag from article_tag