【问题标题】:I need to store HTML emails in a database. Is that a bad idea?我需要将 HTML 电子邮件存储在数据库中。这是个坏主意吗?
【发布时间】:2011-03-17 18:35:27
【问题描述】:

这些 HTML 电子邮件的模板都是相同的,但只是有不同的变量,比如名字、姓氏等。

存储我需要的最少数据并加载模板并每次替换变量是否有意义?

另一种选择是实际创建 HTML 文件并存储对它的引用,这可能是最容易做到的,除了管理文件可能很麻烦,而且它增加了迁移、文件权限、等等。

寻找以前做过这件事的人的意见...

目标/目的/用途:

我有一个预订引擎。当用户进行预订时,他们会收到一封由会话化预订数据生成的确认电子邮件。

此电子邮件提供“无法查看此电子邮件?请在此处查看”链接,该链接提供电子邮件的 Web 视图以及纯文本视图。

除了明文视图之外,我还需要显示发送出去的同一封电子邮件。

模板可能会发生变化,但我认为正因为如此,我应该有一个模板表并将数据映射到模板。

【问题讨论】:

  • 存储的目的是什么?归档?稍后发送?编辑?如果模板改变了会发生什么?需要更多信息海事组织
  • @Pekka - 啊,我忘了。更新中。

标签: sql redundancy


【解决方案1】:

我会这样做,因为模板布局可能会随着时间而改变,但人员信息应该保持不变。因此,将人员信息存储在数据库中并将模板从数据库中删除是有意义的。

事实上,如果您使用 Velocity(Java 中)等模板引擎来构建您的 HTML 电子邮件会更好......顺便说一句,非常简单。

【讨论】:

    【解决方案2】:

    一方面,cpu 比内存更昂贵,因此最好保存更多数据以减少计算使用的 cpu 功率。 但在您的情况下,我会保存最少的数据、电子邮件或您要保存的内容,因为它允许您轻松地改造您的模板,并在应用程序的多个位置重用数据。

    【讨论】:

      【解决方案3】:

      您保留了未标准化的冗余数据(尤其是由于模板)。我不建议这样做。但在评论中提到,你想用这些数据做什么很重要。

      如果您只保存所需的数据,您可以轻松地交换该模板并使用另一个模板。

      【讨论】:

        【解决方案4】:

        是的,你的权利在轨道上。我做了类似的事情。所有动态/运行时变量都从 @@symbol 开始。

        所以在数据库中你会有一个模板表。一张表用于动态/运行时变量。一张表,用于模板和动态/运行时变量之间的映射。

        tblTemplate - TemplateID、TemplateValue
        tblRuntimeVariables - RuntimeVariableID、VariableString、VariableSQL
        tblMapping - TemplateID、RuntimeVariableID、RuntimeVariableValue

        使用额外映射表的好处是,在现有更改中添加新的动态变量意味着不对现有数据库进行任何更改。只会将更多行添加到 tblMapping。

        在我的例子中,我还有一个额外的列用于在 tblRuntimeVariables 中存储 SQL 语句,以防 从数据库中获取运行时变量的值

        【讨论】:

          猜你喜欢
          • 2020-12-12
          • 2018-10-17
          • 2011-12-03
          • 1970-01-01
          • 2015-05-12
          • 1970-01-01
          • 2010-10-30
          • 2016-12-28
          • 2015-07-20
          相关资源
          最近更新 更多