mak_ufo
@mak_ufo

Как правильно спроектировать БД для такой задачи?

Здравствуйте. Задача примерно такая:
Есть 4 сайта, с которого мне приходят новости. Есть пользователь, который вводит ключевые слова. И при каждом приходе новости я должен отправить ссылку на неё пользователю, если:
1) он указал в подписках этот сайт
2) в описании к новости есть хотя бы одно ключевое слово, указанное им.

И никак не могу понять, как спроектировать БД. Если брать MongoDB, то как-то так:
User = {
email: "ya@ya.ya",
sites: ["ya.ru", "google.com"],
keys: ["spirt", "sport", "music"]
}


Если брать MySQL, то не понимаю. Думал сделать по одной таблице для каждого сайта, где в одном столбце хранились бы email'ы тех, кто на них подписан. А в отдельной таблице хранить ключевые слова для пользователя в виде длинной строки, где слова идут через запятую. Но опять же не уверен, что так правильно.

Как быть?

P. S. Уточню, что сайтов всего 4. А ключевые слова у всех пользователей разные
  • Вопрос задан
  • 282 просмотра
Решения вопроса 2
@lega
Если брать MongoDB, то как-то так:
Тут особо думать не очем, норм вариант.

А в отдельной таблице хранить
Это излишне, в mysql можно сделать так же как и для mongodb
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если сайтов всего четыре, и дальнейшее расширение не планируется в принципе, то просто в таблице пользователей добавляются четыре соответствующих поля. Если закладываться на расширение - таблица пользователей, таблица сайтов и таблица подписок (user_id, site_id).
По ключевым словам - либо одно поле со списком таких слов в таблице пользователей, либо так же таблица ключевых слов и таблица связи пользователь-ключевое слово.
В предельном варианте таблица подписок модифицируется до (user_id, site_id, keyword_id), давая пользователю задавать свой набор ключевых слов для каждого сайта.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы