我正在设计一个数据库。这就是我必须代表的:
要管理用户之间的对话,并且我有一个包含以下列的表(Talk
):
TalkId (NOT NULL, PK)
Type (NOT NULL, values: UserTalk or GroupTalk)
StarterUserId (NOT NULL, the user that has started the talk).
RecepientUserId: (NULL, the user that has received the first message. NULL if it is a GroupTalk).
DateStarted: (NOT NULL, when the talk has been started).
GroupId: (NULL, the group that owns the talk. NULL if it is a UserTalk)
我还有一个Message
表来存储每个Talk
的所有消息。此Message
表格有一列Read
,表示收件人已阅读该邮件。
如果用户1向用户2发送消息,首先我检查是否有Talk
行:
((StarterUserI == 1 and RecepientUserId == 2) OR
(StarterUserI == 2 and RecepientUserId == 1))
如果没有,我在其上创建一个新行。然后,我在Message
表中插入消息,Message.TalkId
指向我创建的行。
我的问题是我不知道如何知道用户有多少条未读消息可以进行小组讨论。
对于用户来说,如果Message.Read
列为假,则可以轻松查看。
要知道用户是否在群组的谈话中有未读消息,我可以为每个群组成员插入相同的消息,从而更改收件人。例如:
我有一个小组,有三名成员。成员1向组发送消息。我必须向用户2插入一条消息,并向用户3插入相同的消息:
但是,这可以使增长Message
表格非常快。
我想在Talk
表中添加新的两列,发送到该通话的最后一条消息的日期,以及发送最后一条消息的用户的ID。如果我在谈话中有最后一条消息的日期和ID,我可以检查是否有新消息,但我不知道有多少消息。
我还有一个UserGroup
表来存储作为组成员的用户以及用户组。我可以在此表中添加一个新列,以存储用户对群组通话的消息数量。每当另一个用户向该组发送消息时,我将在Message
表上插入一个新行,并将UserGroup.Unread
上的值增加一。但我想我会弄乱设计。
我如何知道用户对群组通话有多少未读消息?
答案 0 :(得分:1)
您可以使用列MessageStatus
,UserID
和MessageID
添加新表Read
,为每个邮件收件人添加一行(UserTalk或GroupTalk) 。这样可以避免在复制Message
表中的行时出现的冗余。
为方便起见,您可以在Message
上引入INSERT触发器以在MessageStatus
中创建行。