База данных для отслеживания пользовательских уведомлений или активности (как на Facebook) - PullRequest
7 голосов
/ 22 июля 2011

Я только что прочитал следующие сообщения на ту же тему:

Отслеживание уведомлений, подобных Facebook (дизайн БД) и Дизайн базы данных для хранения уведомлений для пользователей

Было предложено несколько решений, но не совсем то, что мне нужно и как это должно быть для системы уведомлений, подобной Facebook.

В уведомлении у нас часто есть некоторые ссылки, указывающие на пользователя, который принялкакое-то действие, ссылка на пост или видео, которое он прокомментировал, ссылка на что-либо, и часто у нас есть несколько ссылок в одном уведомлении.

notification
-----------------
id (pk)
userid
notification_type
notification_text
timestamp
last_read

С помощью этой структуры таблицы мы можем показать все уведомления для одного пользователяи это довольно солидное решение.Но в этом случае мы можем отображать только текстовое уведомление.Мы не можем просто дать ссылку на пользователя или запись на стене.

Я пытаюсь найти решение этой проблемы.Одним из них является сохранение BB-кодов в свойстве messages_text, но тогда вам нужно написать анализатор BB-кодов как для веб-приложений, так и для мобильных приложений.Другой будет создание другой таблицы, которая получена из этой таблицы уведомлений с идентификаторами для сущностей, которые нам нужны.Пример:

PostCommentNotification : Notification
----------------------------------------
id
userId (user who commented on a wall post)
postId (post where comment was made)

Теперь мы можем написать шаблон для отображения уведомления (нам больше не нужно свойство text в таблице уведомлений), а затем обработать его отображение.Я также не удовлетворен этим решением, поскольку количество таблиц, производных от таблицы уведомлений, может быть большим (для каждого типа уведомлений).

Я ищу идеи!:) * * 1021

1 Ответ

8 голосов
/ 20 сентября 2011

К сожалению, здесь не так много ответов. У меня была такая же проблема, и я не нашел хорошего решения. Наследование в базах данных всегда сложно и слишком быстро усложняется. Таким образом, я остановился на простом решении: сохранить массив значений ключа, завернутый в JSON, в столбец «data».

Примерно так:

notification
-----------------
id (pk)
userid
notification_type
notification_data
timestamp
last_read

Например, для уведомления о комментариях вы будете хранить

[{"author_id": "1234", "comment_id":"1234"}]

Затем вы используете тип уведомлений для правильного форматирования ваших данных на стороне клиента.

Не вижу никаких недостатков, так как нам нужен только идентификатор ресурса на клиенте для создания URL или намерений, а атомные поля для индексов бесполезны.

Надеюсь, это поможет.

...