Локализация данных в SQL Server с GUID или …?

Я должен сделать базу данных, которая высоко локализуется. Почти для всех объектов мне нужен перевод в 5 + языки. Некоторые объекты даже требуют и дополнительный локализованный ресурс (как изображения, которые я ввожу как пути).

Вопрос теперь:

1: СПРАВОЧНАЯ ТАБЛИЦА ОБЪЕКТ/ТАБЛИЦА PER (своего рода чрезмерно увеличенная в размерах схема?)

если я создаю "Локализованную" справочную таблицу локализации для каждой таблицы, я нуждаюсь в локализованных значениях (и использую стандарт 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 в качестве PKs и затем просто использую единственное имя и единственную таблицу локализации ресурса.

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: ЕДИНСТВЕННЫЙ ПОИСК, НО ГУИДЫ ТОЛЬКО ДЛЯ ЛОКАЛИЗАЦИИ (лучший из 2 миров?)

если я использую нормальный int/bigint PKs и затем добавляю столбец 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: СПРАВОЧНАЯ ТАБЛИЦА, КОТОРАЯ ВОЗВРАЩАЕТ идентификатор ЛОКАЛИЗАЦИИ (идут назад и вперед?)

я должен составить таблицы без гуидов, но идентификатор локализации хранилища в родительской таблице?

Как здесь:

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 в качестве PKs, я читал, я перенесу огромную производительность и штраф размера данных, но я буду также немедленно иметь дело с уникальностью элемента через серверы, dbs...

7
задан BuzzBubba 4 March 2010 в 11:51
поделиться

1 ответ

Прежде всего, я настоятельно рекомендую использовать существующий стандарт для идентификаторов локализации - не изобретайте заново еще одну систему! Используйте стандартные коды ISO-639 для языка, например «en» для английского, «fr» для французского и т. д.

См. Википедию для списка всех определенных кодов.

Во-вторых, по моему опыту и моему мнению, я бы использовал языковую таблицу для каждой сущности.

Обычно у нас есть какое-то "название системы" в основной таблице, например английский текст, а затем у нас есть таблица "(entity) _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.

13
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: