繁体   English   中英

聊天室应用程序的数据库设计

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM