消息系统的数据库模式为Skype

时间:2014-02-11 22:16:08

标签: mysql database design-patterns database-design

我正在尝试使用与我的宠物项目类似的功能来构建网络聊天,但是我很难理解应该如何为聊天组构建数据库。

任何人都可以展示此类数据库的架构,或解释如何将聊天室用户与消息联系起来。

2 个答案:

答案 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)

不要对keysprimary 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这样的东西。 。最好在开始时使工具链正确,而不是稍后尝试更改。 无论您采用哪种方式,您都可以尝试下载开源网络聊天解决方案并只研究代码。