База данных - многоязычный онлайн словарь - PullRequest
0 голосов
/ 17 февраля 2019

Я реализую базу данных для многоязычного онлайн-словаря.На данный момент у меня есть только 2 языка (RO - румынский, CS - чешский), но я думаю, что, возможно, в будущем я захочу добавить больше языков (например, EN - английский).

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

Я думаю, как мне реализовать TRANSLATIONSстол для нескольких переводов.На данный момент у меня есть эта реализация, но это не тот путь, потому что в случае, если я добавлю еще 10 языков, мне нужно будет добавить еще 10 столбцов:

WORD (id,word,language_id,..)
TRANSLATIONS(id,ro_id,cs_id)
LANGUAGE(id,code)

LANGUAGE
id   code
1     ro
2     cs

WORD

id word language_id
1  xxx      1
2  yyy      2

TRANSLATIONS
id   ro_id   cs_id
1      1       2

Я мог бы сделать таблицу как:

TRANSLATIONS(id,word_id,translation_id)

но в этом случае я не знаю, как искать перевод, и мне пришлось бы добавить оба случая:

TRANSLATIONS
id   word_id   translation_id
1      1            2
2      2            1

Некоторые идеи?Я надеюсь, что мое описание имеет смысл.

Спасибо.

ОБНОВЛЕНИЕ: Другим подходом может быть таблица со столбцом JSON, например:

TRANSLATIONS(id,data)

id                            data
1          {"ro":1,"cs":2,"another_lang": "another_id"}

, ноэто хорошая идея?

1 Ответ

0 голосов
/ 17 февраля 2019

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

Может быть, у вас может быть что-то вроде:

WORD (id,word,language_id,..)
TRANSLATIONS(id,language_id_from,language_id_to,word_id_from,word_id_to)
LANGUAGE(id,code)

Тогда у вас будут записи вроде:

    LANGUAGES
id  code
1   EN (english)
2   RO (romanian)

      WORDS
id    word   language_id
221   hi     1
4423  Bună   2


TRANSLATIONS

id      lang_id_from   lang_id_to   word_id_from   word_id_to
54512         1             2             221          4423

Затем для данного слова на данном языке, например "hi" на английском языке, вы должны найти запись переводов, которая соответствует идентификатору слова ( 1 )и укажите целевой идентификатор языка, например румынский ( 2 ).

Что-то вроде:

SELECT * 
FROM Translations 
WHERE word_id_from = 1 AND language_id_to = 2

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

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