[英]Database design for chatroom application
编辑
人们认为这个问题过于笼统,因此我在这里将范围缩小一些:
我有一个带有双重主键的表:roomID和userID。
以下是一些示例数据:
roomID | 用户身份
1 | 5
1 | 9
1 | 10
1 | 12
2 | 5
2 | 9
2 | 10
3 | 5
3 | 17
给定用户列表:5、9、10,如何返回仅包含这些用户的roomID? 因此,在这种情况下,它应该返回2。
我希望可以在1个SQL查询中完成。
任何帮助将不胜感激。
原始问题
我正在制作一个聊天室应用程序,需要为其设计数据库后端。 所有房间都是即时创建的,并在最后一个用户离开房间时被销毁。 用户可以将其他用户添加到他们所在的任何房间。
目前这是我的设计:
我有一个带有两列的聊天室表。 两列都是该表的主键(因此,只有两列相同时,一行才被视为重复)。 第一列是房间ID。 第二列是用户ID。 我这里的想法是使用相同的会议室ID,此会议室中可以有很多用户(因此,具有相同会议室ID但用户ID不同的行)。 当我需要创建一个新房间时,只需选择MAX(房间ID)+ 1并使用此ID创建一个新房间,然后将用户添加到其中。
给定一个用户ID列表(例如1,5,31,12),我需要确定是否已经为他们创建了一个房间。 换句话说,我需要确定是否存在所有具有相同房间ID且用户ID为1,5,31,12的行。 但是,如果创建的会议室的用户为1,5,31,12,6(一个或多个额外用户),则不应算作已经创建的会议室。 然后,我需要为他们创建一个新房间并将用户添加到该房间。 少于列表的用户数也是如此。
现在,我在形成查询以确定我是否需要创建新房间时遇到麻烦,如果不需要,请检索现有房间的房间ID。
任何帮助,将不胜感激。
另外,我认为这种设计非常麻烦,欢迎您提出更好的数据库设计建议。
PS我正在使用的数据库是MySQL
我认为可以向聊天室表中再添加1个col,名称为num_member,这是房间中的成员数(或者最好有room(room_id,number_member)表)。 首先,为了简单起见,我假设您在聊天室中有num_member。 此查询可能有效:
Select * From chatroom where user_id IN ($userIdList) Group by room_id HAVING count(*) = chatroom.num_member
希望这个帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.