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

3
我需要存储一堆带有标签(主营业务,次营业务等)的电子邮件地址。
我有两种方法:
1.将它们存储为列email1、email2、email3——这限制了具有任意数量电子邮件的灵活性。 它还限制了存储与电子邮件相关的其他详细信息的灵活性,例如电子邮件激活日期等。
2.将它们存储为行——这使我可以拥有任意数量的电子邮件地址,并允许我拥有特定属性。
我倾向于解决方案2——你有什么意见吗?
6个回答

9
如果电子邮件类型是固定的(例如商务和个人),您可以将它们作为列放置,但要相应命名列。这意味着不要使用Email1,Email2,Email3字段,而是使用PersonalEmail和BusinessEmail字段。
如果电子邮件地址的类型和数量是灵活的,请始终使用第二个选项,但要注意这会对用户界面产生负面影响。虽然很容易放置两个或三个文本框来显示第一和第二个电子邮件,但对于未知数量的电子邮件,您需要使用类似网格或列表的东西,可能看起来并不理想。
然而,在我的经验中,这种类型的通常用例是大多数用户(99%)只有一个电子邮件地址/电话号码/街道地址,但您有一些异常值,例如输入了7个电子邮件。
如果是这种情况,您可以采用混合方法。使用其中一个电子邮件地址(在大多数情况下是那个电子邮件地址)作为主要地址,并将其存储到原始表中,并向表添加一个附加的布尔字段,以显示用户是否具有其他电子邮件地址(这将存储到另一个表中)。
这样,您既可以简单地查看人的电子邮件地址,而不使用连接,也可以在某人决定将他拥有的每个电子邮件地址都放入应用程序时获得灵活性。

1
感谢您的精彩文章。是的,这是我在设计的另一个领域所做过的事情,可能在这里也可以做到。 - Siraj Samsudeen
你如何更改主电子邮件地址?编辑用户表,从电子邮件表中删除记录,然后添加旧的记录?这种混合方法似乎有些混乱。 - cdmckay
@cdmckay - 更改主电子邮件很麻烦。它涉及删除一行、插入一行和更新一行。但如果这种情况很少发生(我不记得曾经更改过主电子邮件),那么为了避免频繁进行连接,即使有些混乱也是值得的。 - SWeko
避免一个简单的连接真的值得那么混乱吗?我认为在关系型数据库中,连接操作是比较廉价的,或者至少这种类型的连接是如此。 - cdmckay
@cdmckay - 我不知道。这取决于用户在做什么。在一百万个查询中节省一毫秒可能比优化一个每月执行一次花费五分钟的查询更好。 - SWeko

3

除非您事先确切地知道一个人可以拥有多少电子邮件地址(对于所有时间),否则选择2是最好的方法。


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

1

我认为第二个选项更好。

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

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


1

选项2是最佳选择,因为它会提供您额外的属性。还要注意用户事先可以拥有多少电子邮件地址。


0
我提出以下解决方案或方法:您可以在数据库中为每个预计具有多个值或要跟踪历史记录的实体添加2个文本列,如下所示: 1. 多重定义文本列 2. 历史文本列
多重定义列可以是包含YAML或XML格式中的附加电子邮件ID的文本列,在您的UI上显示。 历史列仅用于跟踪用户更改的旧电子邮件地址以及其他详细信息(例如删除日期)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接