我有这个alogirthm问题,在创建mysql表方面,让我解释一下这个场景:
我有一个帖子表:
Posts{id, user_id,image,tag,date}
每个帖子只能有标签! ONLY
我是否需要另一张表来存储标签!我可以理解,如果每个帖子都有多个标签,你必须创建另一个表来存储标签!但这是唯一一个!
即
如果我想获得带有'DOG'标签的所有帖子,我会使用:
select all posts where tag=DOG
你觉得这是错还是坏?我很困惑!
答案 0 :(得分:3)
如果您系统中的帖子真的只需要一个标签,那么技术上您只需将标签保留在Post记录中即可。但是你不应该这样做:例如,当你有关于狗的250000个帖子并决定将“狗”标签重命名为“犬”时会发生什么?
更好的想法是创建一个Tag表并在Post表上放置一个外键。例如:
Post{post_id, user_id, image, tag_id, date}
Tag{tag_id, description}
但是,万一有一天,你真的面临着面临的情况,其中一个帖子可以有多个标签......
然后,您将描述一个模型,其中Posts
和Tags
存在于所谓的Many-to-Many relationship中:给定的标记可以与任意数量的帖子和给定的帖子相关联可以与任意数量的标签相关联。
现在,您不仅需要一个单独的标签表,还需要一个将帖子与标签相关联的关系表。例如:
Post{post_id, user_id, image, date}
Tag{tag_id, description}
Post_Tag{post_id, tag_id}
然后,您将选择所有带有“Dog”标签的帖子,如下所示:
SELECT p.*
FROM Post p
JOIN Post_Tag pt ON pt.post_id = p.post_id
JOIN Tag t ON pt.tag_id = t.tag_id
WHERE t.description = 'Dog'
答案 1 :(得分:1)