加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite – 从多个关系中匹配

发布时间:2020-12-12 19:08:25 所属栏目:百科 来源:网络整理
导读:我有一个“帖子”表.每个帖子记录可以有一个或多个标签. 如果我将标记存储到单个列中,作为逗号分隔的字符串,我可以轻松找到标记为“Abc”并标记为“Def”的帖子,甚至可以进行部分匹配. 我正在使用sqlite和这个方法的“FTS”表,它工作正常,但有人告诉我这是一
我有一个“帖子”表.每个帖子记录可以有一个或多个标签.
如果我将标记存储到单个列中,作为逗号分隔的字符串,我可以轻松找到标记为“Abc”并标记为“Def”的帖子,甚至可以进行部分匹配.

我正在使用sqlite和这个方法的“FTS”表,它工作正常,但有人告诉我这是一个不好的做法,我应该将标签存储在不同的表中并使用JOIN.
如果我将标记存储在不同的表中并在这两个表之间创建关系,如何在单个查询中找到标记为“Abc”和标记为“Def”的帖子?可能吗?

这确实是糟糕的设计实践.

由于您需要对列值执行字符串操作以分隔标记,因此性能会降低.所以索引不能使用.这违反了数据库设计的规范化规则.

一个更好的设计

tags table
----------
id
name


posts table
-----------
id
title
body
...


post_tags table
---------------
post_id
tag_id

要获得所有帖子都有两个标签

select p.id,p.title,p.body
from posts p
join post_tags pt on pt.post_id = p.id
join tags t on pt.tag_id = t.id
where t.name in ('abc','def')
group by p.id,p.body
having count(distinct t.id) = 2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读