sql-server – 带有GUID或……的SQL Server中的数据本地化?

前端之家收集整理的这篇文章主要介绍了sql-server – 带有GUID或……的SQL Server中的数据本地化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要创建一个高度本地化的数据库.对于几乎所有实体,我需要翻译成5种语言.一些实体甚至需要和其他资源本地化(就像我作为路径输入的图像). @H_502_2@现在的问题是:

@H_502_2@1:LOOKUP TABLE PER ENTITY / TABLE(有点臃肿的架构?)

@H_502_2@我应该为每个表创建一个“本地化”本地化查找表,我需要本地化的值(并使用标准的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
@H_502_2@要么

@H_502_2@2:具有单个查找本地化表的GUID(重型guid用法?)

@H_502_2@我应该使用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
@H_502_2@3:单一查看,但仅限于本地化(两个世界中最好的?)

@H_502_2@我应该使用普通的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
@H_502_2@4:查看本地化ID的LOOKUP表(来回走动?)

@H_502_2@我应该创建没有guid的表,但是将本地化ID存储在母表中?

@H_502_2@像这儿:

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
@H_502_2@如果我使用GUID作为PK我已经阅读过我会遭受巨大的性能和数据大小的损失,但我也会立即处理跨服务器的元素唯一性,dbs ……

解决方法

首先,我强烈建议使用现有的本地化标识符标准 – 不要重新发明另一个系统!使用ISO-639标准代码语言,例如英语中的“en”,法语中的“fr”等. @H_502_2@有关所有已定义代码的列表,请参阅Wikipedia.

@H_502_2@其次,根据我的经验和判断,我会使用每个实体的语言表.

@H_502_2@我们通常在主表上有一些“系统名称”,例如英文文本,然后我们有一个表“(实体)_TX”用于各种语言的文本表示.

@H_502_2@像这样的东西:

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
@H_502_2@对我来说,这比使用单一的基于GUID的编码方案更清晰,更明确,更“直观”.

原文链接:https://www.f2er.com/mssql/77618.html

猜你在找的MsSQL相关文章