多语言数据库表设计

时间:2015-04-12 19:32:28

标签: sql database-design multilingual nested-query

我对多语言数据库使用以下方法,其中我使用的字段,例如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的不同值?对我正在尝试做的事情有没有更好的方法?

我希望问题很明确......

1 个答案:

答案 0 :(得分:0)

MUSICLIKE_ID表的USERS列中,您显示的是ID列表,但这不符合正常形式,从长远来看,这可能很糟糕。你应该删除它。

而是实现多对多关系,例如许多用户喜欢很多音乐类型'使用联结表(又名桥/地图表)。

在这种情况下,表格为USER_MUSIC ( user_id , music_id )。注:你会创建一个覆盖两列的唯一约束。

然后当你加入表格时,你会通过联络表。

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