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

Database design 电子邮件或私人消息的良好数据库设计,database-design,Database Design,现在,我正在为我的站点使用消息系统。该消息用于在站点成员之间发送消息。它也可以用来发送友谊邀请等。但是,我还没有找到一个好的数据库设计。我希望消息系统使用线程样式,就像电子邮件一样。但由于我不是复杂数据库设计方面的专家,所以我不知道如何做到这一点 到目前为止,这是我的设计 CREATE TABLE messages ( message_id BIGINT PRIMARY KEY, message_date_time TIMESTAMP DEFA

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

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

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)
);
还有一张桌子

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
);
我相信我需要另一个表来存储消息之间的链接,这就是为什么我需要这些

CREATE TABLE message_reply (
  message_id        BIGINT, -- FK to table messages
  message_to_reply  BIGINT, -- FK to table messages
);
但这些表只会让我很难在PHP页面上查询和处理。 我只希望用户可以查看源电子邮件和回复(如GMAIL或Facebook的墙)…
有更好的建议吗

需要的附加说明 这条信息可以发送给许多人 收件人但一旦它发送了,它就不能 可以修改。假设我发了一封信 发送给X、Y和Z的消息。当X回复时, 在我的邮箱中会有一条来自X的消息 收件箱如果Z回复,将会有一个 来自我收件箱中Z的消息,具有相同的 带有X的主题(例如RE:我的 第一封邮件)。当我选择X的时候 消息,将会有X的消息, 然后是我的第一条信息。如果我 选择向X发送回复,X将 收到包含我的回复的消息, 她的回答和我的第一条留言。 无论我是回复Z还是再次回复Z, 那将是X.X的另一件事 看不到Z在屏幕上写了什么 另一方面,Z看不到 我和X之间的对话。 很复杂,不是吗?这就是我为什么要坚持下去的原因 因为这些,我已经到了死亡的边缘 重要。唉!!



谢谢你

Tony

如果消息由1人发送,但仅由1人接收,则不需要链接表,您可以:

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

user
- userid
如果该邮件可以是对另一条邮件的回复,只需在邮件本身添加一个字段,说明它是对以下内容的回复:

message
- parent_id -> message.message_id, or null if it isn't a reply.

这是一个非常简单的设置,如果您打算对其进行大量扩展,这并不是最佳设置,但它非常简单。

如果发件人将邮件放入垃圾箱,会发生什么情况?通过这种数据库设计,邮件将被放入发送者和接收者的垃圾箱中。是否需要为一封邮件保留两条记录,一条为发件人,另一条为收件人?或者使用一个联接表来跟踪这一点?