我的工作,我打算在多國語言,提供一種Web應用程序。在設計數據庫時,我會在兩種不同的方式之間來回存儲本地化描述以及數據庫中的內容。
第一個選項是衆所周知的表名,table_name_ml類型選項:
TABLE Category (
ID int,
ParentID int,
Name varchar(50),
Description varchar(255)
)
TABLE Category_ML (
ID int,
CategoryID int,
LocaleID int,
Name varchar(50),
Description varchar(255)
)
第二個選擇是不存儲在所有基本表的文字,而是存儲可以使用令牌到別處查找實際的本地化的文本,像這樣:
TABLE Category (
ID int,
ParentID int,
NameToken varchar(50),
DescriptionToken varchar(50),
)
// Tables in a separate content management type system
TABLE Content (
ID int,
Token varchar(50)
)
TABLE Translation (
ID int
ContentID int,
LocaleID int,
Value text
)
這裏的想法是,內容和翻譯表將保持在數據庫中的許多不同的實體本地化的文本。服務層只會使用令牌返回基礎對象,並且視圖層會使用內容/轉換表查找實際的文本值 - 這會大量緩存。內容/翻譯表也可用於存儲其他CMS類型的內容(網頁上的靜態文本等)
我喜歡第一個選項,因爲它的嘗試和真實,但第二個選項似乎有這麼多其他選項優點:
- 我所有的文本/本地化內容都在一個地方(使翻譯更容易)。
- 服務層並不需要關心語言環境。
- 通過不必加入一堆ML類型表來簡化查詢。
因爲我以前從未見過這樣的設計,所以我認爲我必須缺少一些東西。有沒有這樣設計的好理由?或者,也許有更好的選擇,我沒有想到?
?難道你只是用你的代幣直接在翻譯表中查找翻譯? – 2011-01-20 15:50:46
沒有,我認爲它,如果令牌只持有像信息。 。 爲什麼表類別無論如何都需要token-properties? –
2011-01-20 16:03:46
@paskster - 內容表用於避免在翻譯表中重複標記列。對於給定的令牌會有很多翻譯。如果需要,它還允許您在類別表格和內容表格之間擁有RI。 – 2011-01-20 16:15:38