配置文件中名称的翻译:[2个表,一个用于名称+一个用于配置文件]或[一个表用于两个表,但名称使用jsonb字段]?

时间:2019-12-03 18:51:36

标签: sql postgresql

我正在开发一个profile module,可以在其中翻译公司名称(即公司可能具有相同的名称,但使用不同的语言,例如Microsoft的Eng / Rus /Майкрософт)。用户可以使用搜索功能来查找所需公司的个人资料,因此我将使用全文搜索(FTS)。

目前,我看到了两种实现方式,但是需要建议哪种更好(或者可能有更好的选择)。

第一种方式。

使用2张桌子,

名称

id | name       | lang        | ProfileID
1  | Microsoft  | 1 (ie. Eng) | 1
2  | Майкрософт | 2 (ie. Rus) | 1
3  | Google     | 1 (ie. Eng) | 2
4  | Гугл       | 2 (ie. Rus) | 2

个人资料

id | address                   | about     | etc...
1  | some address of Microsoft | Some info | ...
2  | some address of Google    | Some info | ...

在这种情况下,当用户搜索公司时,我们检查Name表并通过JOIN返回names + profile data

第二种方式。

只有一张桌子

个人资料

id | name (JSONB)                           | address                   | about     | etc...
1  | [{"name": "Microsoft", "lang": "en"},  | some address of Microsoft | Some info | ...
      {"name": "Майкрософт", "lang": "ru"}]
2  | [{"name": "Google", "lang": "en"},     | some address of Google    | Some info | ...
      {"name": "Гугл", "lang": "ru"}]

在这种情况下,无需JOIN数据。

在两种情况下,我都需要返回所有翻译,而不仅仅是用户要求的翻译。

哪种方式更可取?我将使用PostgreSQL 12。

0 个答案:

没有答案