2015-04-12 61 views
0

我用下面的方法对多语言数据库,其中字段我使用如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呈现不同的值?有什么更好的方法来做我想做的事情?

我希望这个问题是清楚....

+0

您需要使用m:n关系的联结表来标准化音乐,如fk在用户列表中,而不是将其存储为“列表”。 –

+0

我很抱歉,我只是一个业余爱好者......你的意思是规范音乐,创建一个额外的表? – Juan

回答

0

在你有什么似乎是ID列表中USERS表的MUSICLIKE_ID列,这不符合正常的形式,并且是可怕的,在工作长远来看。你应该删除这个。

而是使用连接表(aka bridge/map tables)实现多对多的关系,例如“许多用户喜欢很多音乐流派”。

在这种情况下,该表将是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