我以tag1,tag2,tag3等形式提交标签......但我不确定如何在性能和专业性方面创建数据库布局。
当有人点击代码时,我想查询并提取每个包含该代码的网页。
答案 0 :(得分:7)
标签本身会进入标签表。此表仅包含唯一标记
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'
答案 1 :(得分:1)
如果这就是你想要的,那么:
tags
包含tag_id
和tag
字段的表格,可能还有与该标记相关联的其他字段,即说明,权限,... page_tags
标记包含tag_id
和page_id
字段的表格,用于保存标记和网页之间的多对多关系(假设您有一个pages
表格page_id
作为索引列)。您还可以考虑任何其他字段,例如添加标记的日期和时间,添加标记的人员等。)但是稍后您可能想要添加标签云等内容,这将需要一些数据缓存(您不希望每次有人标记某些内容时重建您的标记,而是每天定期执行一次,例如每天一次)。为此,您可以添加另一个包含tags_cloud
和tag_id
字段的表count
。