Я разрабатываю многоязычное программное обеспечение. Что касается кода приложения, то локализуемость не является проблемой. Мы можем использовать языковые ресурсы и иметь всевозможные инструменты, которые хорошо работают с ними.
Но каков наилучший подход при определении схемы многоязыковой базы данных? Скажем, у нас много таблиц (100 или более), и каждая таблица может иметь несколько столбцов, которые могут быть локализованы (большинство столбцов nvarchar должно быть локализуемым). Например, одна из таблиц может содержать информацию о продукте:
CREATE TABLE T_PRODUCT (
NAME NVARCHAR(50),
DESCRIPTION NTEXT,
PRICE NUMBER(18, 2)
)
Я могу представить три подхода к поддержке многоязычного текста в столбцах NAME и DESCRIPTION:
-
Отдельный столбец для каждого языка
Когда мы добавляем новый язык в систему, мы должны создать дополнительные столбцы для хранения переведенного текста, например:
CREATE TABLE T_PRODUCT ( NAME_EN NVARCHAR(50), NAME_DE NVARCHAR(50), NAME_SP NVARCHAR(50), DESCRIPTION_EN NTEXT, DESCRIPTION_DE NTEXT, DESCRIPTION_SP NTEXT, PRICE NUMBER(18,2) )
-
Таблица переводов со столбцами для каждого языка
Вместо сохранения переведенного текста сохраняется только внешний ключ в таблице переводов. Таблица переводов содержит столбец для каждого языка.
CREATE TABLE T_PRODUCT ( NAME_FK int, DESCRIPTION_FK int, PRICE NUMBER(18, 2) ) CREATE TABLE T_TRANSLATION ( TRANSLATION_ID, TEXT_EN NTEXT, TEXT_DE NTEXT, TEXT_SP NTEXT )
-
Таблицы переводов со строками для каждого языка
Вместо сохранения переведенного текста сохраняется только внешний ключ в таблице переводов. Таблица переводов содержит только ключ, а отдельная таблица содержит строку для каждого перевода на язык.
CREATE TABLE T_PRODUCT ( NAME_FK int, DESCRIPTION_FK int, PRICE NUMBER(18, 2) ) CREATE TABLE T_TRANSLATION ( TRANSLATION_ID ) CREATE TABLE T_TRANSLATION_ENTRY ( TRANSLATION_FK, LANGUAGE_FK, TRANSLATED_TEXT NTEXT ) CREATE TABLE T_TRANSLATION_LANGUAGE ( LANGUAGE_ID, LANGUAGE_CODE CHAR(2) )
Для каждого решения есть плюсы и минусы, и я хотел бы знать, каковы ваши опыты с этими подходами, что вы рекомендуете и как бы вы приступили к разработке схемы многоязычной базы данных.