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

蝴蝶刀刀
TA貢獻1801條經驗 獲得超8個贊
不需要更改新語言的數據庫架構(從而限制代碼更改) 不需要為未實現的語言或特定項的翻譯占用大量空間 提供最大的靈活性 你不會有稀疏的桌子 您不必擔心空鍵,也不必檢查是否正在顯示一個現有的轉換,而不是一些空條目。 如果更改或擴展數據庫以包含其他可翻譯的項/事物/等,則可以使用相同的表和系統-這與其他數據非常不耦合。
添加回答
舉報
0/150
提交
取消