mvc dot.net 模型的多语言数据库模式
multilingual database schema for mvc dot.net model
我们过去开发了一些经典网站,从公司展示网站到电子商店 asp。所有这些都是在多语言环境 (el, en) 中开发的,其中大部分。从数据库视图中,我们选择了以下模式。例如,对于产品 table,我们有两个相关的 tables,一个没有语言依赖字段,另一个用于具有一对多关系的语言依赖字段。
CREATE TABLE ref_language (
Code Char(2)NOT NULL,
Name Varchar(20) NOT NULL,
PRIMARY KEY (Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_product_translation (
ProductId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Description Text NOT NULL,
FOREIGN KEY (ProductId) REFERENCES app_product(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);
为了重新创建产品模型,我们使用存储过程将所请求语言的两个 table 连接起来。
现在我们要进入 dot.net mvc 模型。而我们想知道有没有更好的方法,mvc模型中最suitable.
这取决于您的要求,但您可以只创建一个 class 来加载和缓存内存中的字幕,使用 EF 加载它们。使用静态 class 或最好使用 ASP.NET 缓存。
如果您在客户端执行动态操作,则在必要时通过 WebAPI 控制器的 MVC 公开字符串。
为了使这更容易,我会将您的翻译与架构中的产品分离。让您的翻译通用。
只有一个名为 app_translation 的 table,带有 ID、LanguageCode 和 Translation 字段。然后在需要翻译的标题的任何 table 上引用 ID。
要强制执行参照完整性,您还可以使用具有单列和唯一约束的 app_translation_identifier table。然后FK从app_translation.Id到app_tranlsation_identifier.Id。并且在 app_translation 上还有一个用于 ID 和 LanguageCode 的唯一键。
我们过去开发了一些经典网站,从公司展示网站到电子商店 asp。所有这些都是在多语言环境 (el, en) 中开发的,其中大部分。从数据库视图中,我们选择了以下模式。例如,对于产品 table,我们有两个相关的 tables,一个没有语言依赖字段,另一个用于具有一对多关系的语言依赖字段。
CREATE TABLE ref_language (
Code Char(2)NOT NULL,
Name Varchar(20) NOT NULL,
PRIMARY KEY (Code)
);
CREATE TABLE app_product (
Id Int IDENTITY NOT NULL,
PRIMARY KEY (Id)
);
CREATE TABLE app_product_translation (
ProductId Int NOT NULL,
LanguageCode Char(2) NOT NULL,
Description Text NOT NULL,
FOREIGN KEY (ProductId) REFERENCES app_product(Id),
FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);
为了重新创建产品模型,我们使用存储过程将所请求语言的两个 table 连接起来。 现在我们要进入 dot.net mvc 模型。而我们想知道有没有更好的方法,mvc模型中最suitable.
这取决于您的要求,但您可以只创建一个 class 来加载和缓存内存中的字幕,使用 EF 加载它们。使用静态 class 或最好使用 ASP.NET 缓存。
如果您在客户端执行动态操作,则在必要时通过 WebAPI 控制器的 MVC 公开字符串。
为了使这更容易,我会将您的翻译与架构中的产品分离。让您的翻译通用。
只有一个名为 app_translation 的 table,带有 ID、LanguageCode 和 Translation 字段。然后在需要翻译的标题的任何 table 上引用 ID。
要强制执行参照完整性,您还可以使用具有单列和唯一约束的 app_translation_identifier table。然后FK从app_translation.Id到app_tranlsation_identifier.Id。并且在 app_translation 上还有一个用于 ID 和 LanguageCode 的唯一键。