相关疑难解决方法(0)

241
推荐指数
6
解决办法
8万
查看次数

多语言数据库的模式

我正在开发一种多语言软件.就应用程序代码而言,可本地化不是问题.我们可以使用特定于语言的资源,并拥有适合他们的各种工具.

但是,定义多语言数据库模式的最佳方法是什么?假设我们有很多表(100或更多),每个表可以有多个可以本地化的列(大多数nvarchar列应该是可本地化的).例如,其中一个表可能包含产品信息:

CREATE TABLE T_PRODUCT (
  NAME        NVARCHAR(50),
  DESCRIPTION NTEXT,
  PRICE       NUMBER(18, 2)
)
Run Code Online (Sandbox Code Playgroud)

我可以想到三种方法来支持NAME和DESCRIPTION列中的多语言文本:

  1. 每种语言的单独列

    当我们向系统添加新语言时,我们必须创建其他列来存储翻译后的文本,如下所示:

    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)
  2. 翻译表与每种语言的列

    不存储翻译的文本,而是仅存储翻译表的外键.转换表包含每种语言的列.

    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)
  3. 用于每种语言的行的转换表

    不存储翻译的文本,而是仅存储翻译表的外键.转换表仅包含一个键,而一个单独的表包含每个语言转换的行.

    CREATE TABLE T_PRODUCT (
      NAME_FK        int,
      DESCRIPTION_FK int,
      PRICE          NUMBER(18, 2)
    )
    
    CREATE TABLE T_TRANSLATION ( …
    Run Code Online (Sandbox Code Playgroud)

multilingual database-design localization

222
推荐指数
5
解决办法
9万
查看次数

什么是多语言数据库设计的最佳实践?

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

sql database database-design

183
推荐指数
4
解决办法
11万
查看次数

保留多语言数据的最佳数据库结构是什么?

可能重复:
多语言数据库的模式

这是一个例子:

[ products ]
id (INT)
name-en_us (VARCHAR)
name-es_es (VARCHAR)
name-pt_br (VARCHAR)
description-en_us (VARCHAR)
description-es_es (VARCHAR)
description-pt_br (VARCHAR)
price (DECIMAL)
Run Code Online (Sandbox Code Playgroud)

问题是:每种新语言都需要修改表结构.

这是另一个例子:

[ products-en_us ]
id (INT)
name (VARCHAR)
description (VARCHAR)
price (DECIMAL)

[ products-es_es ]
id (INT)
name (VARCHAR)
description (VARCHAR)
price (DECIMAL)
Run Code Online (Sandbox Code Playgroud)

问题是:每种新语言都需要创建新表,并且"价格"字段在每个表中都是重复的.

这是另一个例子:

[ languages ]
id (INT)
name (VARCHAR)

[ products ]
id (INT)
price (DECIMAL)

[ translation ]
id (INT, PK)
model (VARCHAR) // product
field (VARCHAR) // name
language_id (INT, …
Run Code Online (Sandbox Code Playgroud)

mysql database multilingual translation localization

53
推荐指数
3
解决办法
4万
查看次数

Spring数据国际化最佳实践

我有一个带有spring数据,jpa和hibernate的spring mvc项目.我有一个多语言数据库.我设计了我的数据库和实体.我正在寻找一种按语言查询表格的最佳实践.我是否必须编写自定义jpa查询,或者是否有通用的方法来查询我的表.

如果我在db或实体设计上有错误,请警告我.

数据库:

CREATE TABLE translation (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id));

CREATE TABLE translation_text (
  translation_id BIGINT UNSIGNED NOT NULL,
  lang VARCHAR(2),
  text VARCHAR(1000));

ALTER TABLE translation_text
ADD FOREIGN KEY (translation_id)
REFERENCES translation(id);

CREATE TABLE category (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  category_name BIGINT UNSIGNED NOT NULL,
  PRIMARY KEY (id));

ALTER TABLE category
ADD FOREIGN KEY (category_name)
REFERENCES translation(id);
Run Code Online (Sandbox Code Playgroud)

LocalizedString实体:

@Embeddable
public class LocalizedString {

    private String lang;
    private String text;

    //Constructors and …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data

14
推荐指数
1
解决办法
1921
查看次数

如何在ORM中使用多语言数据库模式?

美好的一天!

我正在寻找实现多语言数据库模式的最佳方法,我使用的方法与此处相同:多语言数据库设计的最佳实践是什么?(一个表有语言中性数据,一个表用于所有翻译).它似乎很好,干净,并没有限制可能的语言数量.

但我想使用一个简单的ORM(如C#中的LINQ,PHP等出口),其中每个表都映射到实体类.这可以工作,但查询变得更加复杂.

可能有一些特殊技术可以使用这样的DB shema和ORM吗?或者我可以从支持更复杂映射的更复杂的ORM中受益?

提前致谢!

database orm multilingual

13
推荐指数
1
解决办法
9853
查看次数