2

私のアプリは、RDBMS (postgres w/activerecord) を使用して、テキスト オブジェクトを保存およびフェッチします。各テキスト オブジェクトには、任意の数の言語を関連付けることができます。これまでのところ、ブログの投稿に任意の数のタグを付けることができるように、これらの言語の関連付けを頭の中でタグとして考えてきました。ただし、これらの言語タグは恣意的なものではなく、代わりに約 30 の小さなセットに制限されています。私のアプリでは、ユーザーはいくつかのテキスト オブジェクトを要求し、言語のセット (英語、ドイツ語、フランス語など) を指定できます。先に進んで、これらの言語のいずれかに関連付けられたテキスト オブジェクトをいくつか取得してください。

言語をこれらのテキストオブジェクトに関連付けてクエリを簡単にするための最も効果的なアプローチ/スキーマは何ですか?

4

1 に答える 1

1

クエリを簡単にするために、ビューを作成して一定の結合を避けることができます。

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
于 2013-01-01T10:36:44.457 に答える