powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование базы для многоязыкового сайта
17 сообщений из 17, страница 1 из 1
Проектирование базы для многоязыкового сайта
    #37484591
Darooma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Появилась необходимость реализовать многоязыковую поддержку. Меня интересует как в таком случае спроектировать базу. Есть таблица Articles (Id, AddedByUser, AddedDate, Title, Description, Body, ViewCount).

Для поддержки многих языков есть 2 варианта
1. Articles (Id, AddedByUser, AddedDate, TitleRU, TitleEN, DescriptionRU, DescriptionEN, BodyRU, BodyEN, ViewCount).

2. Articles (Id, AddedByUser, AddedDate, ViewCount).
ArticlesLocalized(Id, ArticleId, Title, Description, Body, LanguageId)
Languages(Id, Name)

Первый вариант проще, второй - гибче. Какой чаще используется? Какой лучше?
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37484602
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше по каким критериям ?

Мне бы, например, 1 категорически не понравился бы в любом случае.

Если заранее на 1000% (да, не на 100 а на 1000) известно, что языков два и именно те, что заложены, может быть 1 по каким-то резононам удобнее. Если хоть бы раз будет третий язык, 1 вариант просто технически не годится.
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37484609
Darooma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторЛучше по каким критериям ?
гибкость, удобство, расширяемость, простота
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37484618
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гибкость и расширяемость противоречат простоте.

Удобство для кого ? Dba, ненавидящих динамическую генерацию SQL кода, или разработчика, которому часть наплевать на строгие ограничения и связи, мешающие заполнять формы в удобном порядке ?
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37484627
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaroomaПервый вариант проще, второй - гибче. Какой чаще используется?Первый вариант проще только для двухязыковой поддержки. А для многоязыковой он непрост :-)

Вам то что надо?

DaroomaКакой лучше?Я бы выбрал второй.
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37485051
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darooma2. Articles (Id, AddedByUser, AddedDate, ViewCount).
А у вас статью на всех языках сразу добавляет один и тот же пользователь, причём
одновременно?.. И статистика просмотров по ним считается "оптом"?.. И где вы только таких
пользователей-полиглотов берёте?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37485640
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Darooma > Лучше по каким критериям ?
гибкость, удобство, расширяемость, простота Замените эти лозунги на тест-кейсы и смоделируйте работу системы.
Например -
1 добавлена статья (на каком языке)
2 добавлен перевод
3 запрошена статья (без указания языка)
4 запрошены все статьи автора
5 запрошены все статьи с даты по дату
6 запрошен перевод (на определенном языке)
7 добавлена поддержка еще одного языка

Для каждого случая прикинте объем работы (машинной и человеческой) и умножте на предполагаемое количество раз.

Ваш вариант два неплох для варианта равномерного распределения языков, однако если статей на каком либо языке (например русском) гораздо больше остальных, есть возможность "срезать угол" и избежать одного скана. (Если предположение оказалось неверным это проигрыш, лишняя работа)
Короче я предлагаю
Articles (Id, AddedByUser, AddedDate, ViewCount, Title, Description, Body, LanguageId).
ArticlesLocalized(Id, ArticleId, Title, Description, Body, LanguageId)
Languages(Id, Name)
плюс имеем лишний бонус в виде минимальной переделки существующей системы (мелочь, а приятно)

Программист-Любитель Если хоть бы раз будет третий язык, 1 вариант просто технически не годится. Насчет негодится я бы поспорил, alter table никто не отменял, другое дело что такой подход имеет прорву минусов и ни одного плюса для вашего проекта (вряд ли пользователь захочет статью на ВСЕХ языках одновременно)
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37485738
Darooma
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Второй вариант победил. Всем спасибо.
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37486915
SignOff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно, а можно ли как то хранить переводы централизовано в одной табле ?
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37487584
Sergei.Agalakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй вариант добавляет join к каждой выборке.
3. Languages(Id, Name)
Articles (Id, LanguageId, Title, Description, Body, AddedByUser, AddedDate, ViewCount)

Так не устроит?
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37487935
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergei.Agalakov,

вероятно, возможна одна статья на разных языках :)

Непонятно, почему на замечание Dimitry Sibiryakov обиделись :)
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37488407
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
advSergei.Agalakov,

вероятно, возможна одна статья на разных языках :)

Непонятно, почему на замечание Dimitry Sibiryakov обиделись :) Предположу, что для этого варианта имелся в виду ПК (Id, LanguageId)
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37488430
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgadvвероятно, возможна одна статья на разных языках :)
Предположу, что для этого варианта имелся в виду ПК (Id, LanguageId) В этом варианте, с двумя таблицами, статья имеет только один атрибут Id, этого может быть недостаточно.

Хотя, что гадать - полную задачу мы не знаем :)
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37499881
kugu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если, в одном списке, будут присутствовать только 1 вариант - по таблице для каждого языка будет лучше по производительности.
article_en (id, desc, text ...)
article_ru (id, desc, text ...)
article_es (id, desc, text ...)
article_ua (id, desc, text ...)

Если пользователь смотрит в одном списке статьи на нескольких языках (а, например, на странице статьи, ссылки на остальные варианты переводов)
article (id, desc, text ..., lang_id)
many_to_many: article_translation (article_id, translation_article_id, lang_id)
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37499907
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kugu,

ага, и при добавлении нового языка переделывать структуру базы. Гениально. А выигрышь при грамотной организации индексов будет копеечный.
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37506862
devurandom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема занятная.
Попробуйте тип поля array как в postgresql.
...
Рейтинг: 0 / 0
Проектирование базы для многоязыкового сайта
    #37506886
devurandom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуйте тип поля array как в postgresql
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование базы для многоязыкового сайта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]