我需要构建一个消息系统,由admin发送给成员,这是我的数据库架构
id primary key
username varchar
id primary key
title varchar
contents varchar
id primary key
user_id int
message_id int
status varchar'read | deleted | .....'
如果我创建了一条消息并分配给所有成员,假设我有一百万个成员,那么收件人一次会有一百万个带有message_id和user_id的数据,如果管理员经常向所有成员发送消息,数据库会增加数据相当快,有没有更好的结构来处理这个?
答案 0 :(得分:1)
是的,而不是将message_id存储为int,您可以在JSON中存储一组消息及其状态。
即。 message_id {001,002,003,004}
您可以更进一步,将状态存储为JSON
message_id {001:'read',002:'unread',003:'read'}
这样你就可以在PHP / javascript中操作它,然后把它放回数据库中,这样每个用户都有一个json字符串来映射他们消息的最后已知状态。
但是,此解决方案不具有可扩展性,并未考虑良好的数据规范化。但我没有时间向你解释数据库设计 - 就像Jan说这是一个开放式的问题。
以下是一个广泛而简单的概述:https://www.inkling.com/read/access-2010-missing-manual-matthew-macdonald-1st/chapter-2/six-principles-of-database
以下是对类似问题的回答:Database design for email messaging system
答案 1 :(得分:1)
向一个成员或几个成员发送单个消息应该不是问题,但是如果您想向所有成员发送内容,那么我建议您在消息系统中添加一个额外的层来实现类似通知的消息。
您将丢失消息状态(例如,阅读,未读等),但我认为在这种情况下它们不应该非常重要。
我建议添加逻辑,如果有消息分配给例如UserID 0
,则将其显示给所有成员。当然你需要在某个时候删除它,所以它不会打扰成员,或者你也可以为这种通知/消息设置不同的样式 - 例如它们可能会卡在收件箱之上等等。
P.S。它没有回答你的实际问题,但我认为值得建议另一种方法。