gpt4 book ai didi

postgresql - rdbms 查询中语言标签(小标签集)的有效方法

转载 作者:行者123 更新时间:2023-11-29 12:22:19 25 4
gpt4 key购买 nike

我的应用程序使用 RDBMS(带 activerecord 的 postgres)来存储和获取文本对象。每个文本对象都可以关联任意数量的语言。到目前为止,我一直将这些语言关联视为我脑海中的标签,就像博客文章可以有任意数量的任意标签一样。然而,这些语言标签不是任意的,而是限制在大约 30 个的小集合中。在我的应用程序中,用户可以请求一些文本对象并提供一组语言(比如英语、德语和法语),应用程序应该继续并获取与这些语言中的任何一种相关联的一些文本对象。

将语言与这些文本对象相关联以简化查询的最有效方法/架构是什么?

最佳答案

为了便于查询,您可以创建一个 View 来避免持续连接。

create table object (
id serial unique,
object text primary key
);

create table tag (
id serial unique,
tag text primary key
);

create table object_tag (
object_id integer references object(id),
tag_id integer references tag(id)
);

insert into tag (tag) values ('English'), ('French'), ('German');
insert into object (object) values ('o1'), ('o2');
insert into object_tag (object_id, tag_id) values (1, 1), (1, 2), (2, 3);

create view v_object_tag as
select o.id object_id, o.object, t.id tag_id, t.tag
from
object o
inner join
object_tag ot on o.id = ot.object_id
inner join
tag t on t.id = ot.tag_id
;

现在查询就好像它是一个表:

select *
from v_object_tag
where tag in ('English', 'German')
;
object_id | object | tag_id | tag
-----------+--------+--------+---------
1 | o1 | 1 | English
2 | o2 | 3 | German

关于postgresql - rdbms 查询中语言标签(小标签集)的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14106779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com