gpt4 book ai didi

database-design - 多语言数据库的架构

转载 作者:行者123 更新时间:2023-12-03 04:08:18 25 4
gpt4 key购买 nike

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

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

CREATE TABLE T_PRODUCT (
NAME NVARCHAR(50),
DESCRIPTION NTEXT,
PRICE NUMBER(18, 2)
)

我可以想到三种方法来支持“名称”和“描述”列中的多语言文本:

  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)
    )
  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
    )
  3. 包含每种语言行的翻译表

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

    CREATE TABLE T_PRODUCT (
    NAME_FK int,
    DESCRIPTION_FK int,
    PRICE NUMBER(18, 2)
    )

    CREATE TABLE T_TRANSLATION (
    TRANSLATION_ID
    )

    CREATE TABLE T_TRANSLATION_ENTRY (
    TRANSLATION_FK,
    LANGUAGE_FK,
    TRANSLATED_TEXT NTEXT
    )

    CREATE TABLE T_TRANSLATION_LANGUAGE (
    LANGUAGE_ID,
    LANGUAGE_CODE CHAR(2)
    )

每种解决方案都有优点和缺点,我想知道您对这些方法有什么经验,您有什么建议以及您将如何设计多语言数据库架构。

最佳答案

对于每个可翻译表都有一个相关的翻译表,您有何看法?

CREATE TABLE T_PRODUCT (pr_id int, PRICE NUMBER(18, 2))

CREATE TABLE T_PRODUCT_tr (pr_id INT FK, languagecode varchar, pr_name text, pr_descr text)

这样,如果您有多个可翻译列,则只需要一个连接即可获取它+,因为您没有自动生成 translationid,因此可以更轻松地导入项目及其相关翻译。

这样做的负面影响是,如果您有一个复杂的语言回退机制,您可能需要为每个翻译表实现该机制 - 如果您依赖某些存储过程来实现这一点。如果您从应用程序中执行此操作,这可能不会成为问题。

请告诉我您的想法 - 我也即将在下一次申请中就此做出决定。到目前为止我们已经使用了您的第三种类型。

关于database-design - 多语言数据库的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/316780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com