Разработка базы данных для поддержки нескольких языков - PullRequest
1 голос
/ 09 мая 2019

Я пытаюсь внедрить многоязыковую поддержку в серверную часть приложения и пытаюсь найти стратегию для эффективной реализации этого в текущей схеме.

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

Моя идея заключается в том, чтобы в каждой таблице содержались английские значения, включая внешний ключ, который относится к одному «Языку» и нескольким «Языковым значениям» в таблице, содержащей переводы

Так, например,

Таблица-1

Value     |    Lang_ID
"This is a sentence"    |    1
"This is also a sentence"    |    2
"Translate this"    |    3

Таблица-2

Value     |     Lang_ID
"This is a sentence from another table"    |    4
"This table is different from table-1"    |    5

Язык-Table

Lang_ID    |    Lang_Code    |    Value
1    |    "ZHO"    |    "这是一句话"
1    |    "SPA"    |    "esta es una frase"
2    |    "FRA"    |    "c'est aussi une phrase"
3    |    "SPA"    |    "traduce esto"
4    |    "FRA"    |    "ceci est une phrase d'un autre tableau"
....

Я думаю, что тогда вам просто нужно будет запросить Language-Table по WHERE Lang_ID =? AND Lang_Code =? чтобы получить перевод для этого конкретного значения.

Мне интересно пару вещей

1) Это хорошая практика?

2) Как создать внешние ключи, которые еще не существуют для нескольких таблиц, и сохранить каждую из них уникальной (чтобы два перевода разных текстовых значений не попадали под один и тот же Lang_ID)

1 Ответ

0 голосов
/ 09 мая 2019

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

Я также поместил языковые коды в отдельную таблицу, хотя я никогда не находил ситуации, когда мне это было нужно, поэтому предлагаю вам оставить их там, где они есть.

Для уникального идентификатора я предлагаю использовать такую ​​последовательность (бессовестно украденная здесь ):

create sequence sequence_name
    start 1
    increment 1
    NO MAXVALUE
    CACHE 1;

И использовать next_val('sequence_name') при вставке нового поля для перевода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...