急呀!线等 高手们帮忙,电子邮件系统数据库设计问题

时间:2022-05-26 22:35:00
各位大侠们帮帮忙呀,下面是我设计的邮件表,
Q1:
但是会出现这种情况(如果我把一封信同时发送两个人[test1@hx.com;test2@hx.com],这样的话,如果test1先读了这封信,则我置ReaderFlag状态为已读,而test2并没看这封邮件,但是他所看到的邮件状态也是已读,test1删除此邮件时,test2则看不到有邮件发送过来就被删除了。所以我感觉我的数据库设置出现了问题。) 于是我又建个表,表中字段有(mailid,receiptAddr,readerFlag,folderid)分别为{邮件编号,收件人地址(单个),是否读,邮件所在的目录}。不知道这样设计是否恰当,请高手指教一下,如何设计邮件表。``````先谢了

GO
/****** 
表名:E_Mails  
创建人:阿标  
日期: 09/17/2009  
******/

CREATE TABLE E_Mails(
[MailID] [varchar](100) NOT NULL,--邮件编号
[Title] [varchar](255) ,--标题
[Body] [text] ,--正文
[FromAddress] [varchar](50) ,--发件人
[ToAddress] [text],--收件人
[CCAddress] [text] ,--抄送
[SCAddress] [text],--密送
[SenderDate] [datetime],--发送日期
[Contain] [int] NULL,--邮件大小
[AttachmentFlag] [bit] NULL,--是否有附件
[ReaderFlag] [bit] NULL,--是否阅读
[FolderID] [int] NULL,--邮件所在的目录文件编号
[priority] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--优先级
[returnreceipt] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,--回执
[timer] [bit] NULL,--是否定时发送
[timeDate] [datetime] NULL,--定时时间
[CREATETIME] [datetime] NULL




Q2:
嗯,随便再问个问,就是我邮件发送成功后,如何获得我所发送邮件的大小或者说邮件大小等于什么??(附件大小可以获得,但是内容大小什么的怎么获得)

望各位大侠们帮忙,小弟感激万分

14 个解决方案

#1


按你上面那样建表的话
同时发送给2个人应该产生2条E-MAIL记录
哪个收件人已读标记一条记录就可以了

#2


引用 1 楼 atszpp 的回复:
按你上面那样建表的话
 同时发送给2个人应该产生2条E-MAIL记录
 哪个收件人已读标记一条记录就可以了

我也这样想了,但是如果每人都要产生一条EMAIL记录,会增加数据库开销,
不过还是要 谢谢 atszpp:

#3


是否可以再建一个关系表。。。
邮件和发送人的关系

#4


增加不了多大的开销,这个用户邮件状态关系表(每个邮件都与其接收用户建立关系),数据应该是数值吧

#5


引用 3 楼 lsgy2008 的回复:
是否可以再建一个关系表。。。
 邮件和发送人的关系

表中字段有(mailid,receiptAddr,readerFlag,folderid)分别为{邮件编号,收件人地址(单个),是否读,邮件所在的目录}
是的,问题上已有说明,我已建了,如题说明中接收人和邮件之间的关系表

#6


如果你想跟踪每个收件人的状态,就必须建一个邮件和收件人的关联表

你的设计那个关联表信息有点多了,邮件所在的目录应该是邮件表中的信息,不要带到子表来

#7


三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了

#8


一人发一封邮件是最简单有效的办法

否则要实现你的目的,一样的要建一个是否读的表,记录数也是一样多

或者干脆就是公告就一封邮件,不管是否读过
或者干脆一人发一封邮件。

#9


引用 7 楼 yin11 的回复:
三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了

这个还不错,基本都有了
不过第2个表应该是邮件系统用户表,该邮件系统注册用户信息表,主键是Email

#10


应该有邮件表,邮件用户表,邮件附件表。
在邮件用户表设置用户的邮件是否查看标识。删除,只是删除用户表记录。
获取邮件正文的字节数再加上附近内容就是邮件大小。

#11


谢谢各位,期待更多高手们的思路与观点```

#12


引用 10 楼 wuyq11 的回复:
应该有邮件表,邮件用户表,邮件附件表。
 在邮件用户表设置用户的邮件是否查看标识。删除,只是删除用户表记录。
 获取邮件正文的字节数再加上附近内容就是邮件大小。

邮件表,邮件用户表,邮件附件表---》这些表我已经有了,邮件用户表不知道是否就是我的通讯录表

#13


------=_NextPart_472C6F75_0835B3B8_4A87C544
Content-Type: text/plain;
charset="gbk"
Content-Transfer-Encoding: base64

IA0K

------=_NextPart_472C6F75_0835B3B8_4A87C544
Content-Type: text/html;
charset="gbk"
Content-Transfer-Encoding: base64

PERJVj4mbmJzcDs8L0RJVj4=

------=_NextPart_472C6F75_0835B3B8_4A87C544--



各位大小为什么我的POP服务接收QQ的邮件都会和上面类似,主题什么的都可以正常显示

#14


引用 9 楼 ncjcz 的回复:
引用 7 楼 yin11 的回复:
三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了


这个还不错,基本都有了
不过第2个表应该是邮件系统用户表,该邮件系统……


应该还有个邮件与发件人的关系表吧?要不然,在发件箱里怎么查询到已发邮件?

#1


按你上面那样建表的话
同时发送给2个人应该产生2条E-MAIL记录
哪个收件人已读标记一条记录就可以了

#2


引用 1 楼 atszpp 的回复:
按你上面那样建表的话
 同时发送给2个人应该产生2条E-MAIL记录
 哪个收件人已读标记一条记录就可以了

我也这样想了,但是如果每人都要产生一条EMAIL记录,会增加数据库开销,
不过还是要 谢谢 atszpp:

#3


是否可以再建一个关系表。。。
邮件和发送人的关系

#4


增加不了多大的开销,这个用户邮件状态关系表(每个邮件都与其接收用户建立关系),数据应该是数值吧

#5


引用 3 楼 lsgy2008 的回复:
是否可以再建一个关系表。。。
 邮件和发送人的关系

表中字段有(mailid,receiptAddr,readerFlag,folderid)分别为{邮件编号,收件人地址(单个),是否读,邮件所在的目录}
是的,问题上已有说明,我已建了,如题说明中接收人和邮件之间的关系表

#6


如果你想跟踪每个收件人的状态,就必须建一个邮件和收件人的关联表

你的设计那个关联表信息有点多了,邮件所在的目录应该是邮件表中的信息,不要带到子表来

#7


三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了

#8


一人发一封邮件是最简单有效的办法

否则要实现你的目的,一样的要建一个是否读的表,记录数也是一样多

或者干脆就是公告就一封邮件,不管是否读过
或者干脆一人发一封邮件。

#9


引用 7 楼 yin11 的回复:
三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了

这个还不错,基本都有了
不过第2个表应该是邮件系统用户表,该邮件系统注册用户信息表,主键是Email

#10


应该有邮件表,邮件用户表,邮件附件表。
在邮件用户表设置用户的邮件是否查看标识。删除,只是删除用户表记录。
获取邮件正文的字节数再加上附近内容就是邮件大小。

#11


谢谢各位,期待更多高手们的思路与观点```

#12


引用 10 楼 wuyq11 的回复:
应该有邮件表,邮件用户表,邮件附件表。
 在邮件用户表设置用户的邮件是否查看标识。删除,只是删除用户表记录。
 获取邮件正文的字节数再加上附近内容就是邮件大小。

邮件表,邮件用户表,邮件附件表---》这些表我已经有了,邮件用户表不知道是否就是我的通讯录表

#13


------=_NextPart_472C6F75_0835B3B8_4A87C544
Content-Type: text/plain;
charset="gbk"
Content-Transfer-Encoding: base64

IA0K

------=_NextPart_472C6F75_0835B3B8_4A87C544
Content-Type: text/html;
charset="gbk"
Content-Transfer-Encoding: base64

PERJVj4mbmJzcDs8L0RJVj4=

------=_NextPart_472C6F75_0835B3B8_4A87C544--



各位大小为什么我的POP服务接收QQ的邮件都会和上面类似,主题什么的都可以正常显示

#14


引用 9 楼 ncjcz 的回复:
引用 7 楼 yin11 的回复:
三张表
1.邮件信息表(邮件的正文、标题、大小等邮件的描述数据)
2.收件人表(收件人的主要信息如地址等)
3.邮件信息与收件人中间表(邮件编号、收件人编号等,另加收件人状态:0收件人,1抄送人,2密送人等)

注意下数据的分离和传说中的三范式原理就可以很好的设计出来了


这个还不错,基本都有了
不过第2个表应该是邮件系统用户表,该邮件系统……


应该还有个邮件与发件人的关系表吧?要不然,在发件箱里怎么查询到已发邮件?