Это тема, которая обсуждалась несколько раз и всегда зависит от ситуации, но я хотел бы поделиться своей идеей.
Я создаю новую CMS, которая должна поддерживать многоязычные приложения и может быть установлена за существующими приложениями.
Решения, которые я знаю и нашел:
[Product]
id
price
name_en
name_de
name_fr
only getting the fields you need in your language.
или используя таблицы Mutliple, такие как:
[product]
id
price
[languages]
id
tag
[product_translation]
product_id
language_id
name
Joining the correct language
Обе ситуации работают и имеют свои плюсы и минусы. Исходя из вашего выбора, вы должны переписать свой запрос.
моя идея:
[product]
id
price
name
[product_translations]
product_id
language_id
name
[product_es_view]
id -- references the product table
price -- references the product table
name -- references the translation table
Теперь идея заключается в том, что вы создаете представление для каждого языка, но представление идентично таблице продуктов.
Зачем?
С помощью этой настройки я могу создавать не многоязычные сайты, многоязычные без редактирования существующей модели / таблицы. Теперь единственное, что я должен сделать в своем коде, это использовать другую таблицу, и я получаю переведенную версию моей модели (в php это можно сделать, добавив простую черту в вашу модель). С сервером SQL и Mysql вы можете использовать обновляемые представления, которые сохраняют значения в ссылочных таблицах.
Мне нравится слышать, что вы, ребята, думаете об этой идее, и больше всего, какие самые большие недостатки в использовании представлений для этой проблемы?
Я предпочитаю второй вариант, где каждая сущность находится в своей таблице. Если вы используете product_es_view, то это может быть проще, но менее чистый код.
Добавление новых языков обычно не должно включать добавление новых таблиц базы данных. Добавление новой строки в таблицы языков лучше.
Других решений пока нет …