Схема для многоязычной базы данных

222
задан user247702 14 July 2014 в 21:06
поделиться

4 ответа

Что Вы думаете о наличии связанной таблицы преобразования для каждой переводимой таблицы?

CREATE TABLE T_PRODUCT (pr_id интервал, ЦЕНОВОЕ ЧИСЛО (18, 2))

CREATE TABLE T_PRODUCT_tr (pr_id INT FK, languagecode varchar, pr_name текст, pr_descr текст)

Таким образом, если бы у Вас есть несколько переводимый столбец, он только потребовал бы, чтобы единственное соединение получило его +, так как Вы не автоматически генерируете translationid, может быть легче импортировать объекты вместе с их связанными переводами.

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

Сообщенный мне, что Вы думаете - я также собираюсь принять решение на этом для нашего следующего приложения. До сих пор мы использовали Ваш 3-й тип.

110
ответ дан 23 November 2019 в 04:02
поделиться

Третья опция является лучшей по нескольким причинам:

  • не требует, чтобы изменение схемы базы данных для новых языков (и таким образом ограничение изменений кода)
  • не требовало большого количества пространства для нереализованных языков или переводов, конкретный объект
  • Обеспечивает наибольшую гибкость
  • , Вы не заканчиваете с редкими таблицами
  • , Вы не должны волноваться о пустых ключах и проверяя отображение существующего перевода вместо некоторой пустой записи.
  • , Если Вы изменяете или разворачиваете свою базу данных для затрагивания других переводимых объектов/вещей/и т.д., можно использовать те же таблицы и систему - это очень разъединяется от остальной части данных.

-Adam

47
ответ дан Adam Davis 23 November 2019 в 04:02
поделиться

Я обычно шел бы для этого подхода (не фактический sql), это соответствует Вашей последней опции.

table Product
productid INT PK, price DECIMAL, translationid INT FK

table Translation
translationid INT PK

table TranslationItem
translationitemid INT PK, translationid INT FK, text VARCHAR, languagecode CHAR(2)

view ProductView
select * from Product
inner join Translation
inner join TranslationItem
where languagecode='en'

, поскольку наличие всех переводимых текстов в одном месте делает обслуживание настолько легче. Иногда переводы произведены на стороне к бюро переводов, этот способ, которым можно отправить им всего один большой файл экспорта и импортировать его назад столь же легко.

8
ответ дан user39603 23 November 2019 в 04:02
поделиться

Прежде, чем идти в технические детали и решения, необходимо остановиться на минуту и задать несколько вопросов о требованиях. Ответы могут оказать огромное влияние на техническое решение. Примеры таких вопросов были бы:
- Будет все языки использоваться все время?
- Кто и когда заполнит столбцы различными языковыми версиями?
- Что происходит, когда пользователю будет нужен определенный язык текста и в системе нет ни одного?
- Только тексты должны быть локализованы или существуют также другие объекты (например, ЦЕНА может быть сохранена в $ и € потому что они могли бы отличаться)

3
ответ дан Aleris 23 November 2019 в 04:02
поделиться
Другие вопросы по тегам:

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