Как стать автором
Обновить

Комментарии 5

Большое спасибо за вашу статью, я махровый новичок, и сейчас впервые проектирую двуязычную базу данных. Правильно ли я понимаю, что мы добавлением колонок для ещё одного языка уходим от третьей нормальной формы, но так удобнее и эффективнее, чем плодить таблицы под каждый язык? И по факту для каждого отдельно взятого языка у нас как раз и получится 3nf?

вы верно задаете вопрос

тут масса вопросов помимо БД. есть еще организационные сложности

да, копирование полей и таблиц это денормализация, но это по факту оказывается наименьшим злом при реальной разработке

в моей старой статье 14 года все вопросы, в том числе структуры БД, рассмотрены
почитайте -- давайте обсудим https://www.intervolga.ru/blog/projects/bitrix-multylanguage-site/

Для переводов очевидно использовать json, нет ? Или mysql не умеет json колонки ?

Или переводы на каждый язык это всё равно отдельная запись HL-блока ?

Второе забавное. На колонку можно навешать своё правило сортировки (например считать что "е" и "ё" равны, или считать, что "е" меньше "ё"). В postgre, я думаю так и сделано. Но когда вы все переводы переносите в одну колонку, в этот момент вы теряете возможность сортировки строк с учетом языковых особенностей.

С другой стороны сортировка по названию наверное не принципиальна.

И последний вопрос, правильная архитектура в контексте Битрикса ?

1 - json в mysql в 8 версии только. с таблицами/префиксами/id языка проблем особых нет

2 - либо запись, либо колонка.

3 - про сортировку интересная мысль, спасибо

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

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