多语言数据库table设计
Multilingual Database table design
我对多语言数据库使用以下方法,其中我使用的字段如 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 的不同值?对于我正在尝试做的事情,有更好的方法吗?
希望问题清楚....
在 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
我对多语言数据库使用以下方法,其中我使用的字段如 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 的不同值?对于我正在尝试做的事情,有更好的方法吗?
希望问题清楚....
在 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