postgres中的对称关系

问题描述

我一直在使用 Translation API,但建议缓存翻译,因为不必要的服务器行程,所以我将其缓存在 postgres 数据库中。

所以我创建了一个

CREATE TABLE translation_cache(
    src_lang_code CHAR(3),dst_lang_code CHAR(3),src VARCHAR,dst VARCHAR NOT NULL,PRIMARY KEY(src_lang_code,dst_lang_code,src)
);

这意味着,对于每个字符串 src,只有一个src_lang_codedst_lang_code 的翻译。但这是一种对称关系! dog (en) -> собака (ru); собака (ru) -> dog (en),别无他法!

在 postgres 中是否有一种漂亮的方式来实现这种对称关系,或者我应该变得丑陋并复制数据?

解决方法

对此没有非常好的解决方案。

您可以在需要查找翻译时搜索表格两次,也可以添加触发器,在插入行时添加第二个镜像行。

在第一种情况下,您应该添加一个唯一约束,不允许同一对语言使用相同的 dst

让我补充一点,这个翻译模型过于简单。一个词很少与另一种语言中的单个词对应,因此这种关系通常是不对称的。