postgres中的对称关系

Symmetric relationship in postgres

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

所以我创建了一个table

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 中实现这种对称关系,或者我应该变得丑陋并复制数据?

没有非常好的解决方案。

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

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

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