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 的不同值?有没有更好的方法来解决我想要做的事情?

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

4

1 回答 1

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
于 2015-04-12T21:58:15.100 回答