电子邮件或私人消息的良好数据库设计

Guy*_*akz 5 database-design

现在,我正在为我的网站使用消息系统.该消息用于在站点成员之间发送消息.它也可以用来发送友情邀请等.但是,我还没有找到一个好的数据库设计.我希望消息系统使用线程样式,就像电子邮件一样.但由于我不是复杂数据库设计的专家,我无法想象如何做到这一点.

到目前为止,这是我的设计,

CREATE TABLE messages (
  message_id            BIGINT      PRIMARY KEY,
  message_date_time     TIMESTAMP   DEFAULT NOW(),
  message_subject       TEXT,
  message_body          TEXT,
  message_attachment    TEXT, -- path to attachment folder
  message_sender_id     INT, -- FK to table user
  message_sender_status INT, -- 0 = deleted by sender, 1=default (can be seen on sender outbox)
);
Run Code Online (Sandbox Code Playgroud)

和另一张桌子......

CREATE TABLE message_recipients (
  message_id               BIGINT, -- FK to table messages
  message_recipient_id     INT,    -- FK to table user
  message_recipient_status INT,    -- 0=deleted from recipient inbox, 1=new message, 2=read
);
Run Code Online (Sandbox Code Playgroud)

我相信我需要另一个表来存储消息之间的链接,这就是为什么我需要这些

CREATE TABLE message_reply (
  message_id        BIGINT, -- FK to table messages
  message_to_reply  BIGINT, -- FK to table messages
);
Run Code Online (Sandbox Code Playgroud)

但是这些表只会让我很难在我的PHP页面上查询和处理.我只希望用户可以观察源电子邮件和回复(如GMAIL或Facebook的Wall)......有
什么更好的建议吗?

附加说明

我希望邮件可以发送给很多收件人.但一旦发送,它就无法修改.假设我向X,Y和Z发送了一条消息.当X回复时,我的收件箱中会有来自X的消息.如果Z回复,我的收件箱中会有一条来自Z的消息,与X相同的主题(例如RE:我的第一封邮件的主题).当我选择X的消息时,会有X的消息,然后是我的第一条消息.如果我选择向X发送回复,X将收到包含我的回复,她的回复和我的第一条消息的消息.无论我回复Z还是Z再回复我,那将是X的另一个问题.X看不出Z写的是什么,另一方面,Z看不到我和X之间的对话.复杂的不是吗?这就是为什么我因为这些问题而濒临死亡的原因.叹气-_-,

   



谢谢
托尼

DoX*_*icK 1

如果消息由 1 个人发送并且仅由 1 个人接收,则您不需要链接表,您只需这样做:

message
- message_id
- recipient_id -> links to user.user_id
- sender_id -> links to user.user_id

user
- userid
Run Code Online (Sandbox Code Playgroud)

如果该消息可以是对另一条消息的回复,只需向消息本身添加一个字段来表示它是对以下内容的回复:

message
- parent_id -> message.message_id, or null if it isn't a reply.
Run Code Online (Sandbox Code Playgroud)

这是一个非常简单的设置,如果您要大量扩展它,它并不是最佳选择,但它的工作原理非常简单。

  • 如果发件人将邮件放入垃圾箱,会发生什么情况?通过这种数据库设计,消息将被放入发送者和接收者的垃圾箱中。是否需要保留一条消息的两条记录,一条用于发送者,另一条用于接收者?或者也许是一个连接表来跟踪这一点? (2认同)