我正在开发一个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。