3

到目前爲止,我已經完成了這一點。我想知道這是否有一個好的模式。用於動態多語言數據結構的db設計模式

系統具有動態內容。所以不僅數據量和數據本身是動態的(計數(行)),而且字段的數量也是動態的。因此,博客可能有10個字段需要翻譯,但購物車項目有5個。

我一直在做的是爲包含該字段的語言數據的表​​格行插入一個id。該語言表具有id,defaultlanguage,以及任意數量的附加語言。這樣只有一個語言表。

這很漂亮,但我無法更新視圖,因爲當多個連接引用同一個表時,它不可更新(MySQL)。那麼也許有更好的方法來做到這一點。

有更好的設計嗎?在這種情況下使用的一些常見設計模式是什麼?

回答

1
  • 實體域類型ID名稱
  • 實體字段ID名稱的FieldType
  • 實體FieldValuesIDCollectionID領域
  • 實體內容ID字段數據
  • 實體I18NID領域LanguageIDValue

例子:

insert into FieldTypes('S', 'string'); 
insert into FieldTypes('DT', 'date/time'); 

insert into Fields(1, 'Author', 'S'); 
insert into Fields(2, 'Created', 'D'); 

insert into i18n(1, 1, 'en', 'Author'); 
insert into i18n(2, 1, 'ru', 'Автор'); 
insert into i18n(3, 2, 'en', 'Created'); 
insert into i18n(4, 2, 'ru', 'Создано'); 

insert into Content(1, 2, 'Test data'); 
insert into FieldValues(3, 2, 1, 'Tester'); 
insert into FieldValues(4, 2, 2, '2011-03-20T12:20:00'); 

/* Display content fields in the user language */ 
select c.ID, f.ID, i.Value as FieldName, fv.Value as FieldValue 
from Content c, FieldValues fv, Fields f, i18n i 
where c.Fields = fv.CollectionID 
    and fv.Field = i.Field 
    and i.LanguageID = :UserLanguage 
    and c.ID = :ContentID 
+0

你能解釋一下這個吧。這張表是一張表,其中包含許多其他表的所有翻譯數據嗎? – 2011-03-22 00:29:44