我正在创建一个包含电子邮件和现场消息的通信模块。 4个问题:
1)存储邮件时,它可以属于文件夹(垃圾邮件,垃圾邮件,收件箱,发件箱等)。这些单独的表或1个表只有一个“文件夹”列,它是FK到“文件夹查找表”吗?
2)与Hotmail一样,用户可以创建x个自定义文件夹,以便如何在数据模型中表示?我可以说inbox = id 1,outbox = id 2等,但对于自定义文件夹,如“度假电子邮件”,“工作电子邮件”等,我不知道如果消息驻留在该文件夹中,如何在数据模型中显示。
3)一封电子邮件发送给多人。这是否意味着我需要为每个用户发送1行?
4)最后,消息有附件。我假设这意味着一个单独的附件表,FK链接到哪个表用于存储消息?
答案 0 :(得分:8)
1& 2:文件夹需要是一个实体,关系MessageFolder一对多消息
3:具有UserID,MessageID,Type(发件人,收件人)
的MessageUser实体4:附件的单独表格(MessageAttachments)。
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.(一封电子邮件,多封附件)。
但是,如果附件可以包含在许多电子邮件中(例如,如果有人转发电子邮件和附件),并且您希望在模型中使用该附件,则该关系将是多对多的。