我的问题比示例更笼统,但我认为说明这个想法的唯一方法是使用示例。
假设我想为聊天应用程序创建一个数据库。会有一个主题列表。任何“房间”4 个用户在任何时间。
假设有一个话题叫“贝多芬”。如果用户选择该主题,则会获取或创建一个房间。一旦 4 个用户加入了该房间,就会创建房间的另一个实例(相同主题),在创建另一个实例之前最多需要 4 个用户。如果第一个房间实例的用户离开,则该槽是打开的,因此加入主题的第 9 个用户将被发送到第一个房间实例。
管理此问题的最佳方法是什么?我有两个想法:
- “主题”表:id、标签
- “房间”表:id、topicId
- “人口”表:roomId、userId
当用户选择/加入一个主题时,例如SELECT COUNT(userId) FROM Population WHERE topicId = <id>
... 如果 count > 4,创建一个新 Room,将其插入并返回插入 ID。当用户离开房间时,会删除 Population 中的该行。
或者...
- “主题”表:id、标签
- “房间”表:id、topicId、user1、user2、user3、user4。
然后当用户加入时,类似SELECT id FROM Rooms WHERE ISNULL(user1) OR ISNULL(user2) OR ISNULL(user3) OR ISNULL(user4) LIMIT 1
如果没有匹配的行,则插入一个新 Room 并返回插入 ID。当用户离开房间时,该列设置为 NULL。
蒂亚。