本地化数据库表的最佳方法是什么,例如持有国家?
CountryID|Code|NameEN|NameIT
----------------------------
1 |IT |Italy |Italia
SELECT CountryID, Code, NameEN AS Name
FROM Countries
CountryID|Code
--------------
1 |IT
CountryID|LocalizationCode|Name
---------------------------------
1 |EN |Italy
---------------------------------
2 |IT |Italia
SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE LocalizationCode = 'EN'
谢谢!
答案 0 :(得分:2)
我建议使用第二个选项,尽管您似乎有一些数据错误。
国家:
Id Code
===============
1 IT
Localized_Country:
CountryId LanguageCode LocalizedName
=========================================
1 IT Italia
1 EN Italy
然后你会这样查询:
SELECT a.Id, b.LocalizedName
FROM Country as a
JOIN Localized_Country as b
ON b.CountryId = a.Id
AND b.LanguageCode = :InputLanguageCode
WHERE a.Code = :InputInternationalCountryCode
在视图中包裹(或类似的东西),你是金色的。
一些建议:
您可能希望将Language
(或其他类型的Locale
概念)推送到自己的表中。密钥可以是自动增量值,也可以是国际字符,并不重要
请务必在(CountryId, LanguageCode)
上添加一个唯一约束,以防万一。永远不要忘记你的外键。
答案 1 :(得分:1)
我将使用第二个,它更灵活,只记得在第二个表中的CountryId列上创建索引。
我刚刚注意到你的问题:
SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE LocalizationCode = 'EN'
为什么要添加
其中LocalizationCode ='EN'
你认为对于意大利国家而言,可以使用多种语言吗?
EDITED
SELECT CountryID, Code, Name
FROM Countries INNER JOIN CountriesLoc ON Countries.CountryID = CountriesLocs.CountryID
WHERE Code = 'EN'