我正在尝试使用与我的宠物项目类似的功能来构建网络聊天,但是我很难理解应该如何为聊天组构建数据库。
任何人都可以展示此类数据库的架构,或解释如何将聊天室用户与消息联系起来。
答案 0 :(得分:1)
这个怎么样?这当然不是一个解决方案,但它可以进入你最初的预期方向:
+---------------------------------+
| user |
+---------------------------------+
- id (INT) PRIMARY KEY AUTO_INCREMENT,
- name (VARCHAR),
- password (VARCHAR),
- email (VARCHAR),
... other information ...
+---------------------------------+
| chat |
+---------------------------------+
- id (INT) PRIMARY KEY,
- user_id (INT) FOREIGN KEY
+---------------------------------+
| message |
+---------------------------------+
- id (INT) PRIMARY KEY AUTO_INCREMENT,
- chat_id (INT) FOREIGN KEY,
- user_id (INT),
- message (TEXT)
不要对keys
和primary keys
感到困惑,这对于现在并不那么重要。这可以这样工作:
1)每个用户都由他/她id
2)当用户 1 开始与用户 2 聊天时,您在聊天表中创建了两个新条目:
+---------------------------------+
| chat |
+---------------------------------+
id 1, user_id 1
id 1, user_id 2
用户1和用户2一起共享聊天1。如果您愿意,可以将其他用户添加到同一个聊天
id 1, user_id 3
等等。
3)每封邮件都有唯一的ID,并与聊天相关。由于聊天的每个参与者都可以看到该消息,您只需要知道发送它的user_id:
+---------------------------------+
| message |
+---------------------------------+
id 1, chat_id 1, user_id 2, "hello"
id 2, chat_id 1, user_id 1, "hi"
id 3, chat_id 1, user_id 3, "how are you guys!?"
依此类推......我想你明白了这一点:)
答案 1 :(得分:0)
我不能给你一个关系数据库模式,但据我所知,这种类型的项目可能更适合NoSQL风格的数据库(例如Mongo,Couch或Redis),可能是像Node.js这样的东西。 。最好在开始时使工具链正确,而不是稍后尝试更改。 无论您采用哪种方式,您都可以尝试下载开源网络聊天解决方案并只研究代码。