我正在为需要能够在管理员登录时接收通知的用户编写一个web应用程序。这些告示应显示在仪表盘上。
一旦用户阅读了一条消息,他们就可以拒绝它。显然,在创建新用户之前,不应该显示消息。
在设计模式时,我遇到了两个问题:
以下是用于通知的表:
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,因为这确实给应用程序增加了不必要的重量。
发布于 2012-03-05 14:26:55
我想说的是,您自己在这里为#1和#2提供的解决方案似乎还不错。
表示“拒绝”通知的链接表是有意义的,否则您最终必须先为每个用户创建一行,以表示通知,而不是一个通知记录。
我认为对于#2来说,为通知和用户创建一个创建日期也是一个明智的选择。如果您依赖于链接表的选项,则使用“dismissed”列的其他建议将不能使您只在创建用户之后显示通知,因为您将得到所有通知,而不仅仅是那些自用户存在以来的通知。
发布于 2012-03-05 14:18:55
Notification表中添加一个新列,类似于数据类型bit i.boolean的dismissed或readed,默认值为0或false,然后在您的应用程序中,一旦用户打开消息,将dismissed的值更新为1,我看到其他系统添加了一个名为Mark的按钮,以确保用户读取it.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检查通知。
发布于 2012-03-05 14:19:39
您可以通过创建包含用户和消息的表来连接这两个任务。当管理员发送消息时,您会为每个现有的(活动?)创建条目。用户。如果您不需要历史记录,您可以在用户拒绝通知后删除消息;否则,您应该添加“拒绝”一栏。通过这种方式,您不需要复杂的查询就可以获得需要呈现给用户的通知。
https://stackoverflow.com/questions/9568026
复制相似问题