【问题标题】:Storing information/email addresses as csv list in a column? [closed]将信息/电子邮件地址存储为列中的 csv 列表? [关闭]
【发布时间】:2014-01-21 14:24:27
【问题描述】:

我正在考虑将电子邮件作为 csv 列表存储在我的表格的一列中。这将由我的代码使用,它将提取电子邮件 ID,然后向他们发送电子邮件。

我还将 SMTP 服务器信息存储在同一个表中。对于每一行,我有一个发件人地址,几列用于 smtp 服务器信息,最后是一个将电子邮件 ID 存储为 csv 的收件人地址。

有什么理由不应该这样做吗?

【问题讨论】:

  • 如果您必须删除(或更新)电子邮件地址怎么办?找到这样的地址会很麻烦。
  • 规范化您的数据或稍后再付款
  • 每行存储一个电子邮件地址,最终你会分割 csv
  • @AzizShaikh - 是的,我想到了。就我而言,可能不需要更改地址。如果是这样,那么我们可以复制旧值并替换为新值,对吗?

标签: mysql sql sql-server oracle


【解决方案1】:

恕我直言,这是一个非常糟糕的主意。不要这样做。如果你这样做了,你感到抱歉。我知道,因为我已经做到了。当我这样做时,这似乎是一个很好的简化,但我错了。

如果您在需要使用子字符串或正则表达式处理的列中存储某种垃圾,您将系统地破坏任何 RDBMS 系统最重要的目的:快速搜索和更新的能力。

花时间做正确的事。为自己创建一个email 表。许多系统不允许复制电子邮件,但其他系统允许。如果您的系统不允许重复,请使用此表格布局。

  email_address    varchar(255)   primary key
  user_id          reference to id number in your user table (guessing it's a user)
  user_order       a small integer for the 1st, 2nd, 3rd, email etc.

在 (user_id, user_order) 上放置一个复合索引

如果您的系统允许重复电子邮件,请改用此表格布局

  user_id          reference to id number in your user table 
  user_order       a small integer for the 1st, 2nd, 3rd, email etc.
  email_address    varchar(255)  

您的主键是复合键 (user_id, user_order)。您还应该在 email_address 上放置一个索引,以便您可以找到特定的。

这些表中的任何一个可能还需要一个名称字段,因为许多电子邮件地址的结构如下:

           "Neuman, Alfred E." <aen@madmag.com>

更多示例请参见RFC822 的附录 A。

【讨论】:

    猜你喜欢
    • 2017-12-30
    • 1970-01-01
    • 2021-12-10
    • 2014-12-13
    • 2017-07-23
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多