Я работаю над упражнением по моделированию данных, целью которого является создание модели данных для новостной ленты, в которой сообщения не повторяются.
Если пользователь A видел сообщение X , то сообщение X никогда не должно появляться в канале пользователя A .
Любая запись должна появляться в ленте новостей только один раз.
Для этого я создал следующие модели данных для SQL и NoSQL Базы данных.
NoSQL
Сообщения:
{
'_id': '56sd78',
'title': 'this is some post'
}
Пользователи:
{
'_id': '6ds7'
'reads':[
'56sd78',
'5sdthj8'
] // contains post id
}
Выше я храню все сообщения _id
, которые пользователь видел в коллекции пользователей как поле массива reads
.
SQL
Сообщения:
| id | title |
|----|----------------|
| 1 | This is post 1 |
| 2 | This is post 2 |
| 3 | This is post 3 |
Пользователи:
| id | username |
|------|----------|
| 1 | abc |
| 2 | pqr |
| 3 | xyz |
Считывает:
| id | user_id | post_id |
|------|---------|---------|
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 2 |
Выше я храню все сообщения id
, которые пользователь видел в отдельной таблице против пользователей id
.
Какие решения идеально подходят для этого случая?
Имеет ли количество сообщений какое-либо отношение к выбору базы данных?
Есть ли лучший подход к этой проблеме?