动态多语言数据结构的数据库设计模式

时间:2010-11-23 04:24:46

标签: sql database design-patterns database-design language-agnostic

到目前为止,我已经采用了几种不同的方法。我想知道是否有一个很好的模式。

系统具有动态内容。因此,不仅数据量和数据本身是动态的(计数(行)),而且字段数也是动态的。因此,博客可能有10个需要翻译的字段,但购物车项目有5个。

我一直在做的是为表行插入一个id,用于保存该字段的语言数据。此语言表具有id,defaultlanguage以及任意数量的其他语言。这样只有一个语言表。

这很漂亮,但是我无法更新视图,因为当多个连接引用同一个表时,它不可更新(MySQL)。那么也许有更好的方法可以做到这一点。

有更好的设计吗?在这种情况下使用了哪些常见的设计模式?

1 个答案:

答案 0 :(得分:1)

  • 实体 FieldTypes ID 名称
  • 实体字段 ID 名称 FieldType
  • 实体 FieldValues ID CollectionID 字段)< / LI>
  • 实体内容 ID 字段数据
  • 实体 i18n ID 字段 LanguageID )< / LI>

示例:

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