创建多语言数据库的最佳方法是什么? for each 表创建本地化表会使设计和查询变得复杂,在其他情况下,为每种语言添加列很简单,但不是动态的,请帮助我了解企业应用程序的最佳 Select

推荐答案

我们要做的是 for each 多语言对象创建两个表.

例如,第一个表只包含与语言无关的数据(主键等),第二个表包含每种语言的一条记录,其中包含本地化数据和该语言的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>

使用这种方法,您可以根据需要处理任意多个语言(无需为每种新语言添加额外的字段).


Update (2014-12-14): please have a look at 100, for some additional information about the implementation used to load multilingual data into an application.

Sql相关问答推荐

计算周时出现SQL错误结果

返回UPSERT中的旧行值

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

Oracle 23c ROUND,数据类型为DATE

WooCommerce产品的SQL查询:获取sku和产品标签

连续天跟踪购买情况(将标记返回到另一列?)

列(值不为空)到其他有序列

SQL SUM Filter逻辑解释

在 PostgreSQL 中,如何让多个判断约束引用相同的值数组?

计算 ID 满足条件的次数

获取所有用户的第一次和最后一次发货以及到达日期

多行状态下的分组查询判断状态

Snowflake中的动态SQL优化

每组使用平均值来填补缺失值的SQL

COBOL\DB2作业(job)需要帮助?快来获取专业指导!

SQL - 只需要 GROUP BY SELECT 的一列

SQL Server 查找存在于所有不同时期(或序列)中的条目

使用SQL中另一个表的查询结果在表中查找记录

超过100名员工的连续行

如何根据另一列对行值进行分组?