Dan*_*vic 5 mysql database-design mysql-workbench
我正在尝试制作一个小型消息传递系统。它应该具有以下属性:
以下是当前数据库设计的样子:

表私人消息只存储消息的内容。
表用户私人消息用于跟踪发送的消息。它有列“idUser from”和“idUser to”,表示发送消息的用户和接收消息的用户(可以是多个)。
我在为“用户”和“用户私人消息”表选择正确的关系类型(如果整个概念首先是正确的)时遇到困难。我假设“用户”和“用户私人消息”表应该有两个单独的关系,如下所示:
User. idUser和User Private Message。idUser fromUser. idUser和User Private Message。idUser to你能告诉我在这里使用什么关系吗?如果您对如何更轻松地解决此类问题有任何建议,我将更加感激。
谢谢大家的时间。
假设您不尝试跟踪消息线程,即您向 N 个人发送消息,并且他们无法回复:
1) 用户不需要引用其他表
2) 消息应该有一个 ID(显然)和对最初发送该消息的用户的引用
3) 您需要一个连接单个消息及其收件人(用户)的表,如下所示this: message_recipients{user_id, message_id} 其中主键是两个字段的组合。这确保了一条消息可以有多个收件人,并且用户可以是许多不同消息的收件人。
一个用户可以向一个或多个用户发送消息
这是通过 message_recipients 表完成的
消息只能发送给注册用户(即现有的“idUser”记录)
您还需要在应用程序逻辑中处理这个问题,但是如果您添加(正如您应该的)外键和(取决于您的 DBMS)对 message_recipients 表中的每个列添加 NOT NULL 限制,则将有可能在 message_recipients 中创建一条记录,但收件人不存在。
应该跟踪已发送的消息(谁发送了消息以及发送给谁)
这个数据模型支持这一点。例子:
(编辑为用户表的两种不同用途提供更好的别名)
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 次 |
| 最近记录: |