多语言数据库table设计

Multilingual Database table design

我对多语言数据库使用以下方法,其中我使用的字段如 occupationeye_colorcountries_visitedmusic_liked 等。 , 是已经翻译成不同语言的列表中的预先确定的选项。用户只能从提供的选项中进行选择。例如:Table 1 包含所有不可翻译的基本信息。 Table 2 具有眼睛颜色的翻译值,Table 3 具有用户喜欢的音乐类型的翻译值:

TABLE1: (userlist) 
USERID| FNAME| EYECOLOR_ID| MUSICLIKE_ID
"100", "JOHN", "1", "1,3,5"

TABLE2:(eyevalues)
EYECOLOR_ID| EYE_ENGLISH| EYE_SPANISH| EYE_FRENCH
"1", "BLUE", ÄZUL", "BLEU"
ETC...

TABLE3:(musicvalues)
MUSICLIKE_ID| MUSIC_ENGLISH| MUSIC_SPANISH| MUSIC_FRENCH
"1","ROCK MUSIC", "MUSICA ROCK" "MUSIQUE ROCK"
"2","LATIN  MUSIC", "MUSICA LATINA" "MUSIQUE LATIN"
"3","POP MUSIC", "MUSICA POP" "MUSIQUE POP"

ETC...

通过执行左连接查询,我可以轻松地为眼睛颜色提取正确的翻译,因为眼睛颜色只有 1 个值。但是我如何呈现 MUSICLIKE 的不同值?对于我正在尝试做的事情,有更好的方法吗?

希望问题清楚....

USERS table 的 MUSICLIKE_ID 列中,您有一个 ID 列表,这不符合正常形式,并且在长 运行。你应该删除它。

而是使用联结 table(又名 bridge/map tables)实现多对多关系,例如 'many users like many music genres'。

在这种情况下,table 将是 USER_MUSIC ( user_id , music_id )。 n.b。您将创建一个覆盖两列的唯一约束。

然后当你加入 table 时,你要经过交叉路口 table。

select u.user_name, m.music_english
from users as u
join user_music as um
on u.user_id = um.user_id
join music as m
on um.music_id = m.music_id