2015-04-12 82 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