【发布时间】:2011-01-14 22:01:48
【问题描述】:
我正在以tag1,tag2,tag3,ect 的形式提交标签...但是我不确定如何在性能和专业性方面创建数据库布局。
当有人点击一个标签时,我想查询并拉出每个有该标签的页面。
【问题讨论】:
我正在以tag1,tag2,tag3,ect 的形式提交标签...但是我不确定如何在性能和专业性方面创建数据库布局。
当有人点击一个标签时,我想查询并拉出每个有该标签的页面。
【问题讨论】:
标签本身进入标签表。此表只有唯一标签
TAGS
id | tagname
1 stack
2 overflow
您创建一个查找表以将标签表与页面表相匹配
PAGES_TAGS
tag_id | page_id
1 13
1 24
1 11
2 12
然后你做一个连接来查询哪些页面有哪些标签。
SELECT *
FROM pages p
INNER JOIN pages_tags pt ON p.id = pt.page_id
INNER JOIN tags t ON t.id = pt.tag_id
WHERE tag.name='overflow'
【讨论】:
如果这就是你想要的,那么拥有:
tag_id 和tag 字段的tags 表,可能还有一些与标签关联的其他字段,即描述、权限等...page_tags 带有tag_id 和page_id 字段的标签表来保存标签和页面之间的多对多关系(假设您有一个pages 表,其中page_id 作为索引列)。您还可以考虑任何其他字段,例如添加标签的日期和时间、添加标签的人等)但是稍后您可能想要添加诸如标签云之类的东西,这将需要一些数据缓存(您不希望每次有人标记某物时都重建您的标签,而是定期进行,例如每天一次)。为此,您可以添加另一个表 tags_cloud 与 tag_id 和 count 字段。
【讨论】: