我的工作,我打算在多国语言,提供一种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