在SQL数据库中存储电子邮件

时间:2016-08-14 10:03:02

标签: sql

我想创建一个存储消息的简单消息传递应用程序(类似于电子邮件,但只是消息)。我该如何设计数据库?

Users

  • 用户名(主键)
  • 的userPassword

E-mails

  • EmailID(主键)
  • 从(外键到用户)
  • 所有者(用户的外键)
  • 主题
  • 时间
  • 电子邮件内容
  • 电子邮件布局(可能是一个字段中的内容和布局?XAML)

由于可以将电子邮件发送给多个人,因此存储到列的最佳方法是什么?我应该简单地把它作为一个字符串,用逗号分隔,然后在我的代码中检索所有具有函数的用户?或者有更好的方法来解决这个问题吗?

2 个答案:

答案 0 :(得分:7)

表用户

  • 用户ID
  • 用户名
  • 密码

表格电子邮件

  • EMAILID
  • 从(外键到UserId)
  • 所有者(UserId的外键)
  • 主题
  • EmailContent
  • EmailLayout
  • 时间

表格收件人

  • 编号
  • 电子邮件(EmailId的外键)
  • To(UserId的外键)

因此,电子邮件的收件人作为多对一映射链接到电子邮件。

通过这种方式,您可以选择Recipients表格中包含相应EmailId

的所有行,从而选择电子邮件的所有收件人

例如,发送给2个用户的电子邮件将有行(作为示例)

---------------------------
| Id  | Email | To        |
---------------------------
| 1   | 1     | 3 (User1) |
---------------------------
| 2   | 1     | 4 (User2) |

Is storing a delimited list in a database column really that bad?举例说明为什么在数据库表中使用逗号分隔值是不好的做法。

答案 1 :(得分:5)

表用户

  • 用户名(主键)

  • 的userPassword

表格电子邮件

  • EmailID(主键)

  • 从(外键到用户)

  • 主题

  • 时间

  • 电子邮件内容

  • 电子邮件布局(可能是一个字段中的内容和布局?XAML)

表格Email_Recipients

  • 收件人ID(主键)

  • RecipientUserID(来自用户表的外键)

  • EmailID(来自电子邮件表的外键)

  • RecipientType //类型可以是Actual,CC,BCC

可以创建 EmailRecipientTypes

的另一个表格

表格EmailRecipientTypes

  • TypeID(主键)
  • TypeName //可以是Actual,CC或BCC

通过这种方式,您可以将表格Email_Recipients修改为

表格Email_Recipients

  • 收件人ID(主键)
  • RecipientUserID(来自用户表的外键)
  • EmailID(来自电子邮件表的外键)
  • RecipientTypeID(Table EmailRecipientTypes中的外键)

虽然第四个表只包含3个记录,但它有助于减少数据复制,并且可以帮助您以某种所需的方式对电子邮件进行分组(可能是这样)