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

Database design 如何存储多个电子邮件地址,database-design,Database Design,我需要存储一组电子邮件地址,每个地址都有一个标签(主要业务、次要业务等) 我有两种方法: 将它们存储为email1、email2、email3列-这限制了拥有任意数量电子邮件的灵活性。它还限制了存储与电子邮件相关的其他详细信息的灵活性,例如电子邮件的激活日期等 将它们存储为行-这允许我拥有任意数量的电子邮件地址,也允许我拥有特定的属性 我倾向于解决方案2-有什么意见吗?如果电子邮件类型是一成不变的(如业务和个人),您可以将它们作为列,但可以相应地命名列。这意味着,没有Email1、Email2、

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

我有两种方法:

  • 将它们存储为email1、email2、email3列-这限制了拥有任意数量电子邮件的灵活性。它还限制了存储与电子邮件相关的其他详细信息的灵活性,例如电子邮件的激活日期等
  • 将它们存储为行-这允许我拥有任意数量的电子邮件地址,也允许我拥有特定的属性

  • 我倾向于解决方案2-有什么意见吗?

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

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


    然而,根据我的经验,这种类型的通常用例是,大多数用户(99%)只有一个电子邮件地址/电话号码/街道地址,但您有一些异常值,比如输入了7封电子邮件

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


    这样,你就可以两全其美,一种查看个人电子邮件地址的简单方法,而不需要使用连接,并且当某人决定将他拥有的每个电子邮件地址都放入应用程序时,它具有灵活性。

    除非你事先(一直)确切知道一个人可以拥有多少个电子邮件地址,第二个选项更符合规范化模型,因为它允许将来的可伸缩性。

    我认为第二个选项更好

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


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

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

    我建议以下解决方法或解决方案:您可以在数据库中为每个实体添加2个文本列,您希望这些实体具有多个值或要跟踪其历史记录;如下 1.多定义文本列 2.历史记录文本列

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

    感谢您的精彩帖子。是的,这是我在设计的另一个领域做过的,在这里也可以做。你如何更改主要电子邮件地址?编辑用户表,从电子邮件表中删除记录,然后为旧记录添加记录?混合方法似乎有点混乱。@cdmckay-更改主电子邮件是混乱的。它包括删除行、插入行和更新行。但是,如果这种情况千载难逢(我不记得曾经更改过一封主要电子邮件),那么避免一个随时都会发生的加入是值得的。避免一个简单的加入真的值得吗?我认为联接在RDBMSE上是便宜的,或者至少是这种联接。@cdmckay-我不知道。这取决于用户在做什么。在一百万个查询上节省一毫秒可能比优化一个每月只需五分钟的查询要好。