此消息传递系统使用什么关系类型?

Dan*_*vic 5 mysql database-design mysql-workbench

我正在尝试制作一个小型消息传递系统。它应该具有以下属性:

  • 一个用户可以向一个或多个用户发送消息
  • 消息只能发送给注册用户(即发送到现有的“idUser”记录)
  • 应该跟踪发送的消息(谁发送了消息以及给谁)

以下是当前数据库设计的样子:

在此处输入图片说明

私人消息只存储消息的内容。

用户私人消息用于跟踪发送的消息。它有列“idUser from”“idUser to”,表示发送消息的用户和接收消息的用户(可以是多个)。

我在为“用户”和“用户私人消息”表选择正确的关系类型(如果整个概念首先是正确的)时遇到困难。我假设“用户”和“用户私人消息”表应该有两个单独的关系,如下所示:

  • 一对一的关系,连接User. idUserUser Private MessageidUser from
  • 一对多关系,连接User. idUserUser Private MessageidUser to

你能告诉我在这里使用什么关系吗?如果您对如何更轻松地解决此类问题有任何建议,我将更加感激。

谢谢大家的时间。

Pet*_*din 3

假设您不尝试跟踪消息线程,即您向 N 个人发送消息,并且他们无法回复:

1) 用户不需要引用其他表
2) 消息应该有一个 ID(显然)和对最初发送该消息的用户的引用
3) 您需要一个连接单个消息及其收件人(用户)的表,如下所示this: message_recipients{user_id, message_id} 其中主键是两个字段的组合。这确保了一条消息可以有多个收件人,并且用户可以是许多不同消息的收件人。

一个用户可以向一个或多个用户发送消息

这是通过 message_recipients 表完成的

消息只能发送给注册用户(即现有的“idUser”记录)

您还需要在应用程序逻辑中处理这个问题,但是如果您添加(正如您应该的)外键和(取决于您的 DBMS)对 message_recipients 表中的每个列添加 NOT NULL 限制,则将有可能在 message_recipients 中创建一条记录,但收件人不存在。

应该跟踪已发送的消息(谁发送了消息以及发送给谁)

这个数据模型支持这一点。例子:

查找用户 Mike Johnson 发送的邮件的所有收件人的姓名

(编辑为用户表的两种不同用途提供更好的别名)

SELECT recipient.firstname, recipient.lastname
FROM user recipient
JOIN message_recipient mr ON recipient.id = mr.user_id
JOIN message m ON m.id = mr.message_id
JOIN user sender ON m.user_id = sender.id
WHERE sender.firstname = 'Mike' and sender.lastname = 'Johnson'
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2800 次

最近记录:

12 年,9 月 前