多种最佳实践是什么?
创建多语言数据库的最佳方式是什么? 为每个表格创建本地化表格使设计和查询变得复杂,在其他情况下,为每种语言添加列很简单但不是动态的,请帮助我了解什么是企业应用程序的最佳选择
我们所做的是为每个多语言对象创建两个表。
例如,第一个表格只包含与语言无关的数据(主键等),第二个表格包含每种语言的一个记录,其中包含本地化数据和该语言的ISO代码。
在某些情况下,我们添加一个DefaultLanguage字段,以便在没有可用于指定语言的本地化数据的情况下,我们可以回退到该语言。
例:
Table "Product":
----------------
ID : int
<any other language-neutral fields>
Table "ProductTranslations"
---------------------------
ID : int (foreign key referencing the Product)
Language : varchar (e.g. "en-US", "de-CH")
IsDefault : bit
ProductDescription : nvarchar
<any other localized data>
通过这种方法,您可以根据需要处理多种语言(无需为每种新语言添加额外的字段)。
更新(2014-12-14):请查看此答案,以获取有关用于将多语言数据加载到应用程序中的实现的其他信息。
我发现这种方法适用于我:
Product ProductDetail Country ========= ================== ========= ProductId ProductDetailId CountryId - etc - ProductId CountryName CountryId Language ProductName - etc - ProductDescription - etc -
ProductDetail表格以您想要支持的语言保存所有翻译(用于产品名称,说明等)。 根据您的应用程序的要求,您可能希望将国家/地区表下拉以使用区域语言。
我推荐Martin发布的答案。
但是你似乎担心你的查询太复杂了:
为每个表创建本地化表正在进行设计和查询复杂的...
所以你可能会想,而不是写这样的简单查询:
SELECT price, name, description FROM Products WHERE price < 100
...你需要开始写这样的查询:
SELECT
p.price, pt.name, pt.description
FROM
Products p JOIN ProductTranslations pt
ON (p.id = pt.id AND pt.lang = "en")
WHERE
price < 100
不是一个非常漂亮的视角。
但不是手动完成它,你应该开发自己的数据库访问类,它预先解析包含特殊本地化标记的SQL,并将其转换为实际需要发送到数据库的SQL。
使用该系统可能看起来像这样:
db.setLocale("en");
db.query("SELECT p.price, _(p.name), _(p.description)
FROM _(Products p) WHERE price < 100");
我相信你可以做得更好。
关键是要以统一的方式命名你的表和字段。
链接地址: http://www.djcxy.com/p/37451.html