Схема для системы уведомлений для пользователей - PullRequest
1 голос
/ 05 марта 2012

Я пишу веб-приложение для пользователей, которым необходимо иметь возможность получать уведомления от администраторов при входе в систему. Эти уведомления должны отображаться на их приборной панели.

Как только пользователь прочитал сообщение, он может отклонить его. Очевидно, что новым пользователям не следует показывать сообщения до того, как они были созданы.

У меня две проблемы с проектированием схемы:

  1. Как мне определить, что пользователь "отклонил" сообщение?
  2. Как новые пользователи видят сообщения только после их создания?

Вот таблица для уведомлений:

CREATE TABLE [dbo].[Notification] 
(
  [Id] [int] IDENTITY(1,1) NOT NULL,
  [Message] [varchar](max) NOT NULL,
  [DateCreated] [datetime] NOT NULL,
  [CreatedById] [int] NOT NULL
)

Для # 1 я думал о создании таблицы (DismissedNotification_User), которая отображалась бы между Notification.Id и User.Id. Если пара существует, то пользователь отклонил это уведомление. Однако, я не уверен, что это лучший подход (not in против left join)?

Для # 2 самый простой подход, который я вижу, это добавление столбца DateCreated к пользователям и добавление условия к # 1 (where [DateCreated] >= [User].DateCreated).

Я не хочу, чтобы файлы cookie использовались, потому что это действительно добавляет ненужный вес приложению.

Ответы [ 3 ]

1 голос
/ 05 марта 2012

Я бы сказал, что ваши собственные решения для № 1 и № 2 здесь кажутся хорошими.

Таблица ссылок для представления «отклоненного» уведомления имеет смысл, в противном случае в конечном итоге вам придется создать по одной строке для каждого пользователя, чтобы представлять уведомление, а не одну запись уведомления.

Я думаю, что и для # 2 было бы разумно иметь дату создания уведомления и пользователя. Другие предложения по использованию столбца «отклонено» не позволят вам отображать уведомление только ПОСЛЕ создания пользователя, если вы полагаетесь на опцию связанной таблицы, так как в итоге вы получите все уведомления, а не только те, которые были у пользователя существовала.

0 голосов
/ 05 марта 2012

Вы можете объединить эти две задачи, создав таблицу, содержащую как пользователя, так и сообщение.Когда администратор отправляет сообщение, вы создаете запись для каждого существующего (активного?) Пользователя.Если вам не нужна история, вы можете удалить сообщение после того, как пользователь отклонил уведомление;в противном случае вы должны добавить столбец «Уволен».Таким образом, вам не нужны сложные запросы для получения уведомлений, которые вы должны представить пользователю.

0 голосов
/ 05 марта 2012
  • Для # 1: Добавить новый столбец в таблицу Notification, например, dismissed или readed типа данных bit, т.е. boolean со значением по умолчанию 0 или false, затем в вашем приложении, как только пользователь откроет сообщение, обновите значение от dismissed до 1, я видел другие системы, которые добавляют кнопку с именем «Отметить как прочитанную», чтобы гарантировать, что пользователь прочитает ее.

  • Для # 2: Вы можете использовать это поле dismissed, чтобы показывать пользователям только те сообщения, которые еще не были отклонены, так как они не были открыты и прочитаны пользователь.

Таким образом, таблица уведомлений будет выглядеть примерно так:

[Notification] 
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Message] [varchar](max) NOT NULL,
    [DateCreated] [datetime] NOT NULL,
    [CreatedById] [int] NOT NULL,
    [Readed] bit Default(0)
)

Вам понадобится дополнительная таблица для хранения уведомлений для каждого пользователя, например,

dbo.UserNotifications
(
    UserId, NotificationId
)

В вашем приложении при входе пользователя в систему проверьте уведомления с помощью readed = 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...