sql-server – 带有GUID或……的SQL Server中的数据本地化?
我需要创建一个高度本地化的数据库.对于几乎所有实体,我需要翻译成5种语言.一些实体甚至需要和其他资源本地化(就像我作为路径输入的图像).
现在的问题是: 1:LOOKUP TABLE PER ENTITY / TABLE(有点臃肿的架构?) 我应该为每个表创建一个“本地化”本地化查找表,我需要本地化的值(并使用标准的int / bigint PKs作为元素) MYITEMS ------- - MyItemId BIGINT PK - MyItemPrice DECIMAL MYITEMLOCALIZED --------------- - CPK_MyItemId BIGINT FK - CPK_LanguageCode NCHAR - LocalizedName NVARCHAR - LocalizedResourcePath NVARCHAR CUSTOMERS --------- - CustomerId BIGINT PK - CustomerName NVARCHAR CUSTOMERLOCALIZED --------------- - CPK_CustomerId BIGINT FK - CPK_LanguageCode NCHAR - LocalizedName NVARCHAR - LocalizedResourcePath NVARCHAR 要么 2:具有单个查找本地化表的GUID(重型guid用法?) 我应该使用GUID作为PK,然后只使用一个名称和一个资源本地化表. MYITEMS ------- - MyItemId uniqueidentifier PK - MyItemPrice DECIMAL CUSTOMERS --------- - CustomerId uniqueidentifier PK - CustomerName NVARCHAR LOCALIZED --------------- - CPK_ElementGuid uniqueidentifier FK - CPK_LanguageCode NCHAR - LocalizedValue NVARCHAR - LocalizedResourcePath NVARCHAR 3:单一查看,但仅限于本地化(两个世界中最好的?) 我应该使用普通的int / bigint PK,然后为我需要本地化的每个列添加GUID列,并将本地化值存储到单个本地化查找表中. MYITEMS ------- - MyItemId BIGINT PK - MyItemPrice DECIMAL - ItemNameLocalizationGuid uniqueidentifier(GUID) - ItemPictureLocalizationGuid uniqueidentifier(GUID) CUSTOMERS --------- - CustomerId BIGINT PK - CustomerName NVARCHAR - CustomeerNameLocalizationGuid uniqueidentifier(GUID) LOCALIZED --------------- - CPK_ElementGuid uniqueidentifier FK - CPK_LanguageCode NCHAR - LocalizedValue NVARCHAR 4:查看本地化ID的LOOKUP表(来回走动?) 我应该创建没有guid的表,但是将本地化ID存储在母表中? 像这儿: MYITEMS ------- - MyItemId BIGINT PK - MyItemPrice DECIMAL - MyItemNameLocalizedId BIGINT CUSTOMERS --------- - CustomerId BIGINT PK - CustomerName NVARCHAR - CustomerGenderLocalizedId BIGINT LOCALIZED --------------- - LocalizationId BIGINT PK - CustomerId BIGINT FK - LanguageCode NCHAR - LocalizedName NVARCHAR - LocalizedResourcePath NVARCHAR 如果我使用GUID作为PK我已经阅读过我会遭受巨大的性能和数据大小的损失,但我也会立即处理跨服务器的元素唯一性,dbs …… 解决方法首先,我强烈建议使用现有的本地化标识符标准 – 不要重新发明另一个系统!使用ISO-639标准代码语言,例如英语中的“en”,法语中的“fr”等.有关所有已定义代码的列表,请参阅Wikipedia. 其次,根据我的经验和判断,我会使用每个实体的语言表. 我们通常在主表上有一些“系统名称”,例如英文文本,然后我们有一个表“(实体)_TX”用于各种语言的文本表示. 像这样的东西: TABLE CustomerType CustomerTypeID INT IDENTITY(1,1) PK CustomerTypeName VARCHAR(100) -- English "system" name,e.g. "Gold customer" TABLE CustomerType_TX CustomerTypeID INT LanguageID CHAR(2) -- ISO-639 codes CustomerTypeText VARCHAR(200) -- translated texts 对我来说,这比使用单一的基于GUID的编码方案更清晰,更明确,更“直观”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |