邮件/邮件架构问题

时间:2011-01-09 21:07:09

标签: database email schema messaging

我正在创建一个包含电子邮件和现场消息的通信模块。 4个问题:

1)存储邮件时,它可以属于文件夹(垃圾邮件,垃圾邮件,收件箱,发件箱等)。这些单独的表或1个表只有一个“文件夹”列,它是FK到“文件夹查找表”吗?

2)与Hotmail一样,用户可以创建x个自定义文件夹,以便如何在数据模型中表示?我可以说inbox = id 1,outbox = id 2等,但对于自定义文件夹,如“度假电子邮件”,“工作电子邮件”等,我不知道如果消息驻留在该文件夹中,如何在数据模型中显示。

3)一封电子邮件发送给多人。这是否意味着我需要为每个用户发送1行?

4)最后,消息有附件。我假设这意味着一个单独的附件表,FK链接到哪个表用于存储消息?

2 个答案:

答案 0 :(得分:8)

1& 2:文件夹需要是一个实体,关系MessageFolder一对多消息

3:具有UserID,MessageID,Type(发件人,收件人)

的MessageUser实体

4:附件的单独表格(MessageAttachments)。

Email message schema

CREATE TABLE `message`
  (
     `id`       INTEGER NOT NULL AUTO_INCREMENT,
     `author`   INTEGER NOT NULL,
     `contents` TEXT NOT NULL,
     `subject`  TEXT NOT NULL,
     PRIMARY KEY (`id`)
  );

CREATE TABLE `messagefolder`
  (
     `id`         INTEGER NOT NULL AUTO_INCREMENT,
     `id_message` INTEGER NOT NULL,
     `id_folder`  INTEGER NOT NULL,
     PRIMARY KEY (`id`)
  );

CREATE TABLE `folder`
  (
     `id`   INTEGER NOT NULL AUTO_INCREMENT,
     `name` VARCHAR(200) NOT NULL,
     PRIMARY KEY (`id`)
  );

CREATE TABLE `messageattachment`
  (
     `id`         INTEGER NOT NULL AUTO_INCREMENT,
     `fk_message` INTEGER NOT NULL,
     PRIMARY KEY (`id`)
  );

CREATE TABLE `user`
  (
     `id` INTEGER NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`id`)
  );

CREATE TABLE `messageuser`
  (
     `id`         INTEGER NOT NULL AUTO_INCREMENT,
     `fk_message` INTEGER NOT NULL,
     `type`       INTEGER NOT NULL,
     PRIMARY KEY (`id`)
  );;

ALTER TABLE `message` ADD FOREIGN KEY (author) REFERENCES `user` (`id`);
ALTER TABLE `messagefolder` ADD FOREIGN KEY (id_message) REFERENCES `message` (`id`);
ALTER TABLE `messagefolder` ADD FOREIGN KEY (id_folder) REFERENCES `folder` (`id`);
ALTER TABLE `messageattachment` ADD FOREIGN KEY (fk_message) REFERENCES `message` (`id`);
ALTER TABLE `messageuser` ADD FOREIGN KEY (fk_message) REFERENCES `message` (`id`); 

答案 1 :(得分:1)

  

1)存储邮件时,它可以属于文件夹(垃圾邮件,垃圾邮件,   收件箱,发件箱等)。这些单独的表或1个表只有一个   “文件夹”的列是FK到“文件夹查找表”?

一个文件夹可以有很多邮件。如果消息只能驻留在一个文件夹中,则关系是一个(文件夹)到多个(消息),所以对于第二个选择是。 首选是导致未规范化的数据库。

  

2)就像在hotmail上一样,用户可以创建x个自定义文件夹   如何在数据模型中表示?我可以说inbox = id 1,   outbox = id 2等,但对于“假期邮件”等自定义文件夹,   “工作电子邮件”等,我不知道如何在数据模型中显示如果   消息驻留在该文件夹中。

Standars文件夹可能就像你说的那样...,sent = id 3,spam = id 4,trash = id 5。 之后,任何自定义文件夹都将具有:vacation mail = id 6等...

无需对数据模型进行任何更改。

  

3)一封电子邮件发送给多人。这是否意味着我需要1   每个用户发送一行?

一封电子邮件,许多收件人。所以,是的,如果你有一个电子邮件收件人关系表。

  

4)最后,消息有附件。我认为这意味着一个单独的   FK链接到哪个表的附件表   存储消息?

是的,就像答案3.(一封电子邮件,多封附件)。

但是,如果附件可以包含在许多电子邮件中(例如,如果有人转发电子邮件和附件),并且您希望在模型中使用该附件,则该关系将是多对多的。