【问题标题】:How to store multiple email addresses如何存储多个电子邮件地址
【发布时间】:2011-08-08 14:17:15
【问题描述】:

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

我有两种方法:

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

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

【问题讨论】:

    标签: database-design


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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


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

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

      这样您就可以两全其美,一种无需使用联接即可查看个人电子邮件地址的简单方法,以及当某人决定将他曾经拥有的每个电子邮件地址放入应用程序时的灵活性。

      【讨论】:

      • 感谢您的精彩帖子。是的,这是我在设计的另一个领域所做的事情,也可以在这里做。
      • 如何更改主电子邮件地址?编辑用户表,从电子邮件表中删除记录,然后为旧记录添加一条?混合方法似乎有点混乱。
      • @cdmckay - 更改主电子邮件很麻烦。它涉及删除一行、插入一行和更新一行。但是,如果它在蓝月亮中发生一次(我不记得曾经更改过主电子邮件),那么避免一直发生的加入是值得的。
      • 避免简单的连接真的值得这么麻烦吗?我认为 RDBMS 上的连接很便宜,或者至少是这种连接。
      • @cdmckay - 我不知道。这取决于用户在做什么。在一百万个查询上节省一毫秒的时间可能比一个月优化一次需要五分钟的查询要好。
      【解决方案3】:

      选项 2 将是最佳选择,因为它会为您提供额外的属性。还要记下用户可以拥有的电子邮件地址数量。

      【讨论】:

        【解决方案4】:

        我认为第二种选择更好。

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            除非您提前(始终)确切地知道一个人可以拥有多少个电子邮件地址,否则 2 是可行的方法。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-04-28
              • 2015-10-01
              • 1970-01-01
              • 2019-12-31
              • 1970-01-01
              • 2018-08-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多