如何存储多个电子邮件地址

时间:2011-04-19 11:09:22

标签: database-design

我需要存储一堆电子邮件地址,每个地址都有一个标签(主要业务,二级业务等)

我有两种方法:

  1. 将它们存储为email1,email2,email 3 - 这限制了发送任意数量电子邮件的灵活性。它还限制了存储与电子邮件相关的其他细节的灵活性激活电子邮件的日期等
  2. 将它们存储为行 - 这样我就可以拥有任意数量的电子邮件地址,并且还允许我拥有特定的属性。
  3. 我倾向于倾向于解决方案2 - 任何意见?

6 个答案:

答案 0 :(得分:8)

如果电子邮件类型是一成不变的(等等业务和个人),您可以将它们作为列,但相应地命名列。这意味着,没有Email1,Email2,Email3字段,而是PersonalEmail和BusinessEmail字段。

如果电子邮件地址的类型和数量是灵活的,请始终使用第二个选项,但需要注意的是,这会对UI产生负面影响。虽然很容易放两到三个文本框来显示第一封和第二封电子邮件,但对于未知数量的电子邮件,您需要使用网格或列表等可能看起来不太理想的内容。


但是,根据我的经验,这种类型的通常用例是大多数用户(99%)只有一个电子邮件地址/电话号码/街道地址,但是你有一些异常值就像有7封电子邮件进入。

如果是这种情况,你可以选择混合方法。使用其中一个电子邮件地址(在大多数情况下 电子邮件地址)作为主要地址并将其存储到原始表中,并向表中添加一个额外的布尔字段,以显示用户是否有其他地址电子邮件地址(将存储在另一个表中)。

通过这种方式,您可以充分利用这两个方面,一种查看人员电子邮件地址的简单方法,无需使用连接,以及当有人决定将他拥有的每个电子邮件地址都放入应用程序时的灵活性。

答案 1 :(得分:2)

除非您事先确切地知道(一直以来)一个人可以拥有多少个电子邮件地址,否则2是可行的方式。

答案 2 :(得分:1)

第二个选项更符合规范化模型,因为它允许将来具有可扩展性。

答案 3 :(得分:1)

我认为第二种选择更好。

在我的项目中,我使用用户1 - n联系人。

联系人表存储任何类型的联系人,因此用户可以拥有多个地址,电话号码和电子邮件。

答案 4 :(得分:1)

选项2将是最佳选择,因为它将为您提供其他属性。另请注意用户可以拥有的电子邮件地址数量。

答案 5 :(得分:0)

我建议采用以下解决方法或解决方案:您可以在数据库中添加2个文本列,对于您希望拥有多个值的每个实体,或者您希望跟踪历史记录;如下 1.多重定义文本列 2.历史文本栏

多个定义列可以是包含YAML或XML格式的附加电子邮件ID的文本列,它们会显示在UI上。 “历史记录”列仅用于跟踪用户更改的旧电子邮件地址以及其他详细信息(如删除日期)