我正在开发一种多语言软件.就应用程序代码而言,可本地化不是问题.我们可以使用特定于语言的资源,并拥有适合他们的各种工具.
但是,定义多语言数据库模式的最佳方法是什么?假设我们有很多表(100或更多),每个表可以有多个可以本地化的列(大多数nvarchar列应该是可本地化的).例如,其中一个表可能包含产品信息:
CREATE TABLE T_PRODUCT (
NAME NVARCHAR(50),
DESCRIPTION NTEXT,
PRICE NUMBER(18, 2)
)
Run Code Online (Sandbox Code Playgroud)
我可以想到三种方法来支持NAME和DESCRIPTION列中的多语言文本:
每种语言的单独列
当我们向系统添加新语言时,我们必须创建其他列来存储翻译后的文本,如下所示:
CREATE TABLE T_PRODUCT (
NAME_EN NVARCHAR(50),
NAME_DE NVARCHAR(50),
NAME_SP NVARCHAR(50),
DESCRIPTION_EN NTEXT,
DESCRIPTION_DE NTEXT,
DESCRIPTION_SP NTEXT,
PRICE NUMBER(18,2)
)
Run Code Online (Sandbox Code Playgroud)翻译表与每种语言的列
不存储翻译的文本,而是仅存储翻译表的外键.转换表包含每种语言的列.
CREATE TABLE T_PRODUCT (
NAME_FK int,
DESCRIPTION_FK int,
PRICE NUMBER(18, 2)
)
CREATE TABLE T_TRANSLATION (
TRANSLATION_ID,
TEXT_EN NTEXT,
TEXT_DE NTEXT,
TEXT_SP NTEXT
)
Run Code Online (Sandbox Code Playgroud)用于每种语言的行的转换表
不存储翻译的文本,而是仅存储翻译表的外键.转换表仅包含一个键,而一个单独的表包含每个语言转换的行.
CREATE TABLE T_PRODUCT (
NAME_FK int,
DESCRIPTION_FK int,
PRICE NUMBER(18, 2)
)
CREATE TABLE T_TRANSLATION ( …Run Code Online (Sandbox Code Playgroud)创建多语言数据库的最佳方法是什么?为每个表创建本地化表使设计和查询变得复杂,在其他情况下为每种语言添加列很简单但不动态,请帮助我理解什么是企业应用程序的最佳选择
我希望我的数据库支持其表中所有文本值的多语言.
那么这样做的最佳方法是什么?
EDIT1 ::
例如
我有这个"人"表:
ID int
FirstName nvarchar(20)
LastName nvarchar(20)
Notes nvarchar(max)
BirthDate date
...........
Run Code Online (Sandbox Code Playgroud)
所以,如果我希望我的程序支持新语言"让我说法语".
我应该在每次添加新语言时添加新列吗?所以我的"人"表看起来像这样
ID int
FirstName_en nvarchar(20)
FirstName_fr nvarchar(20)
LastName_en nvarchar(20)
LastName_fr nvarchar(20)
Notes_en nvarchar(max)
Notes_fr nvarchar(max)
BirthDate date
...........
Run Code Online (Sandbox Code Playgroud)
或者我应该为语言添加2个新表,为"Person_Languages"值添加其他表?
所以这看起来像:" 语言 "表:
ID int
Lang-symbol nvarchar(4)
Run Code Online (Sandbox Code Playgroud)
" 人 "表:
ID int
BirthDate Date
Run Code Online (Sandbox Code Playgroud)
最后是" Person_Translation "表:
LangID int
PersonID int
Translation nvarchar(max)
Run Code Online (Sandbox Code Playgroud)
.
database globalization database-design localization database-schema