年度最佳數據庫設計者——通過數據表擴展列支持多語言

內容管理系統(CMS)在軟件開發中是一個“有趣的”領域。一方面,在覈心功能上,大部門業務功能都是CRUD操作;另一方面,90%的問題是很容易處理的,但是剩下的10%卻是讓你十分抓狂的。

這就是爲什麼大部分大型CMS項目都支持了插件式的架構——很多軟件平臺都有這類的擴展插件。這類擴展是固化的,結果導致了插件開發人員更多關注獲取所需要的功能特性,而很少去關心如何發佈一個可靠的產品。因此,目前大部分的CMS系統的插件的質量參差不齊。

最近Paul給Joomla安裝了一個插件,然後就不停地收到這類錯誤:

Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
數據行空間太大,數據表一行最大的存儲空間是8126(不包含BLOBs)。這導致存儲溢出,請檢查操作手冊。你需要將某些列轉換爲TEXT或BLOBs。

Paul,像其他優秀的開發者一樣,仔細閱讀了插件的文檔去看看能不能修復這個錯誤。文檔有這麼一句說明:

你可能安裝了太多的語言!

剩下的就剩下了Paul撓頭苦思。沒錯,他的CMS安裝了8種不同的語言,難道8種語言就太多了?這個問題直到他去查看數據表結構才知道問題所在。


這個插件處理多語言的方式十分簡單粗暴,僅僅是在數據表中針對每一種語言去增加對應的數據列。其結果就是一個數據表多達231列數據,而大部分僅僅是指定語言的翻譯複本列。

存在幾種理由去解釋他們爲什麼要這麼做。有可能插件的編寫者並不知道或不關心如何設置一個有意義的對照表;也可能是他們考慮性能——只需要通過一個查詢可以查出更多數據;也有可能他們壓根就沒思考過;又或許是Joomla插件的開發者有不想創建更多數據表的怪癖。

不管怎麼樣,這顯然是處理本地化最糟糕的方式之一。“我提名該開發者作爲年度的最佳數據庫設計者”,Paul揶揄道。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章