Каков наилучший способ создания многоязычной базы данных? Создание локализованной таблицы для каждой таблицы усложняет проектирование и выполнение запросов, в других случаях добавить столбец для каждого языка просто, но не динамично, помогите мне понять, что лучше всего выбрать для корпоративных приложений.
sql
database
database-design
Арсен Мкртчян
источник
источник
Ответы:
Что мы делаем, это создаем две таблицы для каждого многоязычного объекта.
Например, первая таблица содержит только независимые от языка данные (первичный ключ и т. Д.), А вторая таблица содержит одну запись для каждого языка, содержащую локализованные данные плюс код ISO языка.
В некоторых случаях мы добавляем поле DefaultLanguage, чтобы мы могли использовать этот язык, если для указанного языка нет доступных локализованных данных.
Пример:
При таком подходе вы можете обрабатывать столько языков, сколько необходимо (без необходимости добавлять дополнительные поля для каждого нового языка).
Обновление (2014-12-14): ознакомьтесь с этим ответом для получения дополнительной информации о реализации, используемой для загрузки многоязычных данных в приложение.
источник
id
: D. Чтобы объяснить, каждыйid
представляет значение, к которому вы можете присоединить слова из любого языка в реляционной таблице, так что вы получите две таблицы,meaning
(id) иword
(id, sense_id),id
вword
таблице представляет слово id,id
вmeaning
представляет смысл, который универсален.Я рекомендую ответ, опубликованный Мартином.
Но вы, похоже, обеспокоены тем, что ваши запросы становятся слишком сложными:
Так что вы можете подумать, что вместо того, чтобы писать простые запросы вроде этого:
... вам нужно начать писать такие запросы:
Не очень красивая перспектива.
Но вместо того, чтобы делать это вручную, вы должны разработать свой собственный класс доступа к базе данных, который предварительно анализирует SQL, содержащий вашу специальную разметку локализации, и преобразует его в фактический SQL, который вам нужно будет отправить в базу данных.
Использование этой системы может выглядеть примерно так:
И я уверен, что вы можете сделать это еще лучше.
Главное, чтобы ваши таблицы и поля были названы одинаково.
источник
Я считаю, что такой подход работает для меня:
В таблице ProductDetail содержатся все переводы (для названия продукта, описания и т. Д.) На языки, которые вы хотите поддерживать. В зависимости от требований вашего приложения вы можете захотеть разбить таблицу стран на использование региональных языков.
источник
Я использую следующий подход:
Товар
ProductID OrderID, ...
Информация о продукте
ProductID Название Название LanguageID
язык
LanguageID Название Культура, ....
источник
Решение Мартина очень похоже на мое, однако, как бы вы справились с описаниями по умолчанию, когда желаемый перевод не найден?
Для этого потребуется IFNULL () и другой оператор SELECT для каждого поля?
Перевод по умолчанию будет храниться в той же таблице, где флаг, такой как isDefault, указывает, является ли описание описанием по умолчанию, если для текущего языка не найдено ни одного описания.
источник