新聞中心
?作者 | Antonello Zanini

譯者 | 李睿
策劃 | 武穆
讓數(shù)以百萬計(jì)的用戶使用自己開發(fā)的應(yīng)用程序是每個(gè)開發(fā)人員的夢(mèng)想。如果讓世界各地的用戶都能使用其開發(fā)的應(yīng)用程序,那么實(shí)現(xiàn)這一目標(biāo)將變得更加容易。由于并非所有用戶都精通英語或開發(fā)人員的母語,因此需要將其設(shè)計(jì)為多語言的應(yīng)用程序。但是如果沒有多語言數(shù)據(jù)庫,這是不可能實(shí)現(xiàn)的。
設(shè)計(jì)一個(gè)可以輕松擴(kuò)展到新語言的多語言數(shù)據(jù)庫并不容易。這就是開發(fā)人員應(yīng)該依賴最佳實(shí)踐的原因。以下將介紹為什么需要多語言數(shù)據(jù)庫、三種出色的多語言數(shù)據(jù)庫設(shè)計(jì),以及如何選擇最適合的多語言數(shù)據(jù)庫。
下面開始介紹有關(guān)多語言數(shù)據(jù)庫設(shè)計(jì)的知識(shí)。
1.為什么需要多語言數(shù)據(jù)庫?
開發(fā)人員可能永遠(yuǎn)不知道他的應(yīng)用程序?qū)?huì)增長多少,也許他為朋友開發(fā)的一個(gè)小應(yīng)用程序有可能成為數(shù)百萬人使用的國際服務(wù)。如果希望開發(fā)的產(chǎn)品能夠在國際上得以推廣,則需要對(duì)其進(jìn)行多語言設(shè)計(jì),以便可以輕松地使其適應(yīng)不同的文化和市場(chǎng)。這就是國際化的意義所在。
建立一個(gè)為國際化做好準(zhǔn)備的數(shù)據(jù)庫意味著設(shè)計(jì)一個(gè)可以存儲(chǔ)多語言數(shù)據(jù)的數(shù)據(jù)庫。換句話說,后端應(yīng)該能夠提供多種語言的數(shù)據(jù)。為此,后端應(yīng)連接并從多語言數(shù)據(jù)庫中檢索這些數(shù)據(jù)。
需要注意的是,讓用戶可以在多種語言之間切換是一個(gè)很好的功能。這對(duì)于多語種或非母語人士特別有用。因此,即使開發(fā)的項(xiàng)目很小并且針對(duì)本地市場(chǎng),開發(fā)人員也應(yīng)該考慮使用多語言數(shù)據(jù)庫。畢竟,開發(fā)人員無法提前知道其項(xiàng)目將取得多大成功以及哪些用戶將使用它。以下介紹為什么開發(fā)人員選擇正確的多語言數(shù)據(jù)庫設(shè)計(jì)是至關(guān)重要的。
2.為什么應(yīng)該精心設(shè)計(jì)多語言數(shù)據(jù)庫
就時(shí)間和精力而言,更改數(shù)據(jù)庫是一項(xiàng)非常昂貴的操作,因?yàn)樗鼤?huì)引發(fā)連鎖反應(yīng)。修改數(shù)據(jù)庫的結(jié)構(gòu)涉及更改連接到它的后端。這可能還需要開發(fā)人員相應(yīng)地調(diào)整依賴這些后端的前端??傊?,更改數(shù)據(jù)庫結(jié)構(gòu)不是沒有后果的操作。因此,開發(fā)人員應(yīng)該設(shè)計(jì)一個(gè)可以輕松擴(kuò)展且無需頻繁更改的數(shù)據(jù)庫。
可以想象,設(shè)計(jì)多語言數(shù)據(jù)庫有多種方法,每種解決方案都有其優(yōu)缺點(diǎn)??紤]到數(shù)據(jù)庫結(jié)構(gòu)對(duì)應(yīng)用程序的重要性,開發(fā)人員必須精心設(shè)計(jì)多語言數(shù)據(jù)庫。這就是開發(fā)人員不應(yīng)該從頭開始而是依賴最佳實(shí)踐的原因。
以下介紹一些基于最佳實(shí)踐的多語言設(shè)計(jì)。
3.多語言數(shù)據(jù)庫的三個(gè)設(shè)計(jì)
作為一名為世界各地的初創(chuàng)公司工作的全棧web開發(fā)人員,讓我們更深入地探討三種多語言設(shè)計(jì)的優(yōu)缺點(diǎn)。
(1)列方法
在這種方法中,多語言表中的每個(gè)字段的列數(shù)等于數(shù)據(jù)庫支持的語言數(shù)。
具體來說,這是列名模板的樣子:columnName_languageCode
優(yōu)點(diǎn):
- 簡(jiǎn)單:易于實(shí)施。
- 快速:不涉及JOIN或慢查詢。
- 易于處理未翻譯的字段:如果缺少某個(gè)字段的翻譯,可以直接使用。例如,COALESCE(name_it, name_en)→如果name_it不為NULL,則返回name_it,否則返回name_en默認(rèn)值。
缺點(diǎn):
- 難以維護(hù):添加新語言需要更新數(shù)據(jù)庫中所有的多語言表。這也意味著開發(fā)人員需要相應(yīng)地更改其ORM映射。
- 不可擴(kuò)展:表中的列數(shù)隨著應(yīng)用程序支持的語言數(shù)量而增長。
- 復(fù)雜的SELECT條件:忘記SELECT*。需要在SELECT子句中指定每一列。
(2)行方法
在這種方法中,每種語言都有一行。識(shí)別多語言實(shí)體的關(guān)鍵是以下復(fù)合主鍵:
優(yōu)點(diǎn):
- 簡(jiǎn)單:易于實(shí)施。
- 快速:檢索翻譯的內(nèi)容只需要languageCode上的WHERE條件。
缺點(diǎn):
- 復(fù)合主鍵更加復(fù)雜:使用復(fù)合主鍵使識(shí)別元素和JOIN查詢更加復(fù)雜。
- 重復(fù)內(nèi)容:為簡(jiǎn)化起見,非翻譯列通常存儲(chǔ)保存在默認(rèn)語言行列中的相同內(nèi)容。這意味著開發(fā)人員將在多語言表格中擁有大量重復(fù)的內(nèi)容。
(3)翻譯表法
在這種方法中,多語言表的每一列都是翻譯表的外部鍵。換句話說,每個(gè)涉及多語言字段的表都有一個(gè)翻譯表。
優(yōu)點(diǎn):
- 可擴(kuò)展性:添加新語言不涉及更改數(shù)據(jù)庫結(jié)構(gòu)。
- 支持歷史數(shù)據(jù):可以使用翻譯表來跟蹤實(shí)體中每個(gè)字段的翻譯歷史。
- 集中式:一個(gè)實(shí)體的所有翻譯都存儲(chǔ)在一個(gè)地方。
缺點(diǎn):
- 查詢復(fù)雜:查詢變得更加復(fù)雜,因?yàn)榕c多語言實(shí)體相關(guān)的信息分布在兩個(gè)表中。
- 慢查詢:檢索與實(shí)體關(guān)聯(lián)的所有信息需要與列數(shù)一樣多的JOIN??紤]到JOIN對(duì)性能的負(fù)擔(dān),這很容易成為問題。
- 重復(fù)表:它增加了數(shù)據(jù)庫表的大小。另外,需要兩個(gè)表來定義每個(gè)多語言實(shí)體。
4.什么是最適合的多語言數(shù)據(jù)庫設(shè)計(jì)?
每種多語言數(shù)據(jù)庫設(shè)計(jì)都有一定優(yōu)點(diǎn)和缺點(diǎn)。這意味著沒有萬能的方法。開發(fā)人員必須根據(jù)自己的要求、需要和目標(biāo)仔細(xì)選擇。我個(gè)人在不同的項(xiàng)目中使用了這三種方法,并從中吸取了經(jīng)驗(yàn)教訓(xùn)。
當(dāng)處理大數(shù)據(jù)時(shí),開發(fā)人員可能在連接查詢或重復(fù)內(nèi)容時(shí)不堪重負(fù),尤其是從擁有包含數(shù)百萬行的表的數(shù)據(jù)庫的角度來看,列方法特別有用。雖然列方法并不是最具可擴(kuò)展性的解決方案,但它是唯一可行的大數(shù)據(jù)設(shè)計(jì)。
另一方面,當(dāng)企業(yè)能夠得到在當(dāng)?shù)厥袌?chǎng)運(yùn)營的分支機(jī)構(gòu)的支持時(shí),行方法很有用。在這種情況下,內(nèi)容的重復(fù)甚至可能是一個(gè)優(yōu)勢(shì)。
最后,如果開發(fā)人員正在尋找一個(gè)優(yōu)雅且可擴(kuò)展的解決方案,并且不介意性能缺陷,那么翻譯表法是正確的設(shè)計(jì),因?yàn)榉g表法更適合數(shù)據(jù)不會(huì)暴漲的項(xiàng)目。
5.結(jié)論
設(shè)計(jì)一個(gè)可以存儲(chǔ)多語言數(shù)據(jù)的數(shù)據(jù)庫,對(duì)于幫助開發(fā)人員在國際上擴(kuò)展業(yè)務(wù)至關(guān)重要。此外,多語言數(shù)據(jù)的數(shù)據(jù)庫還允許非母語人士使用其應(yīng)用程序。更改數(shù)據(jù)庫是一項(xiàng)復(fù)雜且耗時(shí)的操作,對(duì)應(yīng)用程序架構(gòu)的影響不可忽視。這就是開發(fā)人員應(yīng)該從一開始就將數(shù)據(jù)庫設(shè)計(jì)為多語言的原因。
文章中分析了設(shè)計(jì)多語言數(shù)據(jù)庫的三種不同方法,研究了它們的優(yōu)缺點(diǎn),并詳細(xì)介紹了最適合的方法。
新聞標(biāo)題:如何設(shè)計(jì)多語言數(shù)據(jù)庫
文章源于:http://www.dlmjj.cn/article/dpgopei.html


咨詢
建站咨詢
