【问题标题】:Database schema advice for a user-inter-messaging feature on a PHP-driven websitePHP 驱动网站上用户间消息传递功能的数据库模式建议
【发布时间】:2011-11-03 07:03:02
【问题描述】:

我有一个用户驱动的网站。我想添加消息传递功能。我关心的是我的数据库的可管理性和性能。

我正在考虑这样组织它:我有我的用户表,我的所有用户都有唯一的 id 两个用户之间的任何用户发起的对话都会在“对话”中记录,并且该对话中的所有消息都将使用引用该对话 ID 的外键。

谁能想到不采用这种方法的任何理由?如果我使用索引并将查询限制为每页约 20 个结果,我想知道它的长期性能如何。

+--------+
| users  |
+--------+
|users_id|
|        |
+--------+

+-------------+
|conversations|
+-------------+
|id           |
|user_id1     |
|user_id2     |
+-------------+

+----------------------+
|conversations_messages|
+----------------------+
|id                    |
|conversations_id      | 
|message_body (varchar)|
|message_time (unix timestamp
+----------------------+

编辑: 我意识到我无法追踪谁是发件人/收件人。我的第一直觉是简单地在对话消息中添加一个“发件人”列

【问题讨论】:

  • 我担心“user_id1”/“user_id2”列。如果您希望对话中有两个以上的人,则必须对其进行更改,并且要查找单个用户所在的所有对话,您必须检查这两列。
  • @Doug Kress,这是一个有趣的观点。您有任何建议的替代方案吗?

标签: mysql database database-design database-schema database-performance


【解决方案1】:

看看我对this question 的回答。我在那里解决了一个类似的设计问题。它包括处理谁看到了哪些消息以及谁是每条消息的发送者。

【讨论】:

  • 感谢@Joel Brown,这是一个深思熟虑的回应,它肯定对我有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2011-02-05
  • 2011-11-26
  • 1970-01-01
  • 2011-05-01
  • 2012-10-07
  • 2021-03-26
相关资源
最近更新 更多