我对多语言数据库使用以下方法,其中我使用的字段,例如occupation
,eye_color
,countries_visited
,music_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的不同值?对我正在尝试做的事情有没有更好的方法?
我希望问题很明确......
答案 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