多語(yǔ)言數(shù)據(jù)庫(kù)的架構(gòu)我正在開發(fā)一個(gè)多語(yǔ)言軟件。就應(yīng)用程序代碼而言,本地化不是問題。我們可以使用特定于語(yǔ)言的資源,并擁有各種工具,它們可以很好地工作。但是,定義多語(yǔ)言數(shù)據(jù)庫(kù)模式的最佳方法是什么?假設(shè)我們有很多表(100或更多),每個(gè)表可以有多個(gè)可以本地化的列(大多數(shù)nvarchar列應(yīng)該是可本地化的)。例如,其中一個(gè)表可能保存產(chǎn)品信息:CREATE TABLE T_PRODUCT (
NAME NVARCHAR(50),
DESCRIPTION NTEXT,
PRICE NUMBER(18, 2))我可以想到三種方法來支持名稱和描述列中的多語(yǔ)言文本:每種語(yǔ)言的單獨(dú)列當(dāng)我們向系統(tǒng)添加一種新語(yǔ)言時(shí),我們必須創(chuàng)建額外的列來存儲(chǔ)翻譯的文本,如下所示: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))每種語(yǔ)言都有列的翻譯表只存儲(chǔ)翻譯表的外鍵,而不是存儲(chǔ)翻譯文本?!胺g”表包含每種語(yǔ)言的一列。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)每種語(yǔ)言都有行的翻譯表只存儲(chǔ)翻譯表的外鍵,而不是存儲(chǔ)翻譯文本。“翻譯”表只包含一個(gè)鍵,另一個(gè)單獨(dú)的表包含每個(gè)翻譯成一種語(yǔ)言的行。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))每個(gè)解決方案都有優(yōu)缺點(diǎn),我想知道您對(duì)這些方法的經(jīng)驗(yàn),您推薦的是什么,以及如何設(shè)計(jì)一個(gè)多語(yǔ)言的數(shù)據(jù)庫(kù)模式。
多語(yǔ)言數(shù)據(jù)庫(kù)的架構(gòu)
翻過高山走不出你
2019-07-13 18:39:51