Комментарии 5
Большое спасибо за вашу статью, я махровый новичок, и сейчас впервые проектирую двуязычную базу данных. Правильно ли я понимаю, что мы добавлением колонок для ещё одного языка уходим от третьей нормальной формы, но так удобнее и эффективнее, чем плодить таблицы под каждый язык? И по факту для каждого отдельно взятого языка у нас как раз и получится 3nf?
вы верно задаете вопрос
тут масса вопросов помимо БД. есть еще организационные сложности
да, копирование полей и таблиц это денормализация, но это по факту оказывается наименьшим злом при реальной разработке
в моей старой статье 14 года все вопросы, в том числе структуры БД, рассмотрены
почитайте -- давайте обсудим https://www.intervolga.ru/blog/projects/bitrix-multylanguage-site/
Для переводов очевидно использовать json, нет ? Или mysql не умеет json колонки ?
Или переводы на каждый язык это всё равно отдельная запись HL-блока ?
Второе забавное. На колонку можно навешать своё правило сортировки (например считать что "е" и "ё" равны, или считать, что "е" меньше "ё"). В postgre, я думаю так и сделано. Но когда вы все переводы переносите в одну колонку, в этот момент вы теряете возможность сортировки строк с учетом языковых особенностей.
С другой стороны сортировка по названию наверное не принципиальна.
И последний вопрос, правильная архитектура в контексте Битрикса ?
1 - json в mysql в 8 версии только. с таблицами/префиксами/id языка проблем особых нет
2 - либо запись, либо колонка.
3 - про сортировку интересная мысль, спасибо
ну битрикс тут немного сбоку. там есть свои заготовки для мультиязычности, но они не решают задачу в целом. так что на мой взгляд архитектура в целом оправданна
Правильная архитектура мультиязычного магазина с импортом данных из нескольких систем