Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Проектирование базы для многоязыкового сайта / 17 сообщений из 17, страница 1 из 1
17.10.2011, 09:37
    #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
17.10.2011, 09:49
    #37484602
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
Лучше по каким критериям ?

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

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

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

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

DaroomaКакой лучше?Я бы выбрал второй.
...
Рейтинг: 0 / 0
17.10.2011, 13:52
    #37485051
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
Darooma2. Articles (Id, AddedByUser, AddedDate, ViewCount).
А у вас статью на всех языках сразу добавляет один и тот же пользователь, причём
одновременно?.. И статистика просмотров по ним считается "оптом"?.. И где вы только таких
пользователей-полиглотов берёте?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
17.10.2011, 18:40
    #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
17.10.2011, 20:02
    #37485738
Darooma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
Второй вариант победил. Всем спасибо.
...
Рейтинг: 0 / 0
18.10.2011, 15:04
    #37486915
SignOff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
интересно, а можно ли как то хранить переводы централизовано в одной табле ?
...
Рейтинг: 0 / 0
18.10.2011, 19:00
    #37487584
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
Второй вариант добавляет join к каждой выборке.
3. Languages(Id, Name)
Articles (Id, LanguageId, Title, Description, Body, AddedByUser, AddedDate, ViewCount)

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

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

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

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

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

Хотя, что гадать - полную задачу мы не знаем :)
...
Рейтинг: 0 / 0
27.10.2011, 00:01
    #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
27.10.2011, 00:34
    #37499907
iljy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проектирование базы для многоязыкового сайта
kugu,

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


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