我是MYSQL的新手,我正在研究消息模块。我的表结构就是那样。
消息=> id,message,created
MessageUser => id,message_id,receiver_id,sender_id,is_read
用户=> id,用户名,电子邮件
sender_id和receiver_id与User.id关联,message_id关联到Message.id
当我为我的收件箱执行查询时,我提出了一个条件(WHERE receiver_id = $ param); 与我发送的项目条件相同(WHERE sender_id = $ param);
工作正常。但当我从收件箱中删除邮件或发送邮件时,问题就出现了
bcoz我在UserMessage表上执行删除查询。
当从我发送的邮箱中删除此邮件时,它也会从其他用户的收件箱中删除。
我有2个解决方案
1 即可。添加另一列is_delete并根据从接收方或发送方的删除设置其值。
2 即可。将MessageUser表分成两个表 发件人=> id,message_id,sender_id; 接收器=> id,message_id,receiver_id,is_read;
告诉我什么是更好的解决方案。并告诉我另一个解决方案
提前致谢 请快速回复
答案 0 :(得分:0)
选项3)考虑以下内容:
用户表(可以是发件人或收件人) UserID PK
消息表(消息或响应) MessageID(PK) ParentMessageID(FK to self)
UserMessage表< - 您对此表执行删除操作。消息保持不变,直到所有用户消息被标记为已删除所有父级&儿童消息。 发件人ID ReceiverID 邮件ID 状态(已删除,isRead等)
答案 1 :(得分:0)
恕我直言,我认为更好的方法是添加
列枚举(发件人,收件人,两者)类型。
如果它正在存储sender
,那么它将从发件人中删除,如果它的值为receiver
,则它已被接收者删除,等等。