gpt4 book ai didi

mysql - 将电子邮件退订存储到数据库

转载 作者:可可西里 更新时间:2023-11-01 08:46:28 26 4
gpt4 key购买 nike

我正在开发一种定期向注册客户发送电子邮件的产品,我想从这些电子邮件中实现某种退订机制。

大约有 5 种类型的电子邮件和一个包含所有用户的 User MySql 表。新用户默认订阅所有邮件类型,并且可以分别取消订阅每个邮件类型。

我的问题是我应该如何将这些取消订阅存储到数据库中,同时保持高性能和可伸缩性并且不会使事情过于复杂。以下是出现的几个选项,每个选项都有自己的优点和缺点:

  1. User 表中为每种报告类型添加一个 bool 值列,默认值为 true。
  2. 创建一个与 User 表具有一对一关系的新 Unsubscription 表。每种电子邮件类型都有一列,每个用户都有一行。
  3. 创建一个与 User 表具有多对一关系的新 Unsubscription 表。每个取消订阅请求都会在表格中创建一个新行。

是否有存储退订信息的最佳做法?什么是数据库设计问题?

最佳答案

选项 3. 就数据库模式而言是最“规范化”的,这意味着无需对数据库进行任何迁移就可以添加电子邮件类型……如果您已经有一个用于存储的表,这也是最自然的选择电子邮件类型

然而,如果您添加新的电子邮件类型,您将通过选项 1 获得更好的性能(无 JOIN),但代价是需要进行数据库迁移

选项 2. 似乎具有 1. 的不灵 active ,同时仍然需要一个单独的表,所以这是我最不喜欢的选项

要考虑的其他几个选项:

  • 不要使用模型上的多个 bool 字段(选项 1),而是使用单个 BitField https://github.com/disqus/django-bitfield表示取消订阅...这样做的好处是您可以在不迁移的情况下添加新的电子邮件类型,而且查询速度也一样快。删除你必须小心的类型

  • 如上所述,如果您已经有一个用于EmailType 的表,那么在User 模型上建立多对多关系是有意义的。但是你可以使用 django-denorm自动更新模型上的 BitField,这可能会两全其美

关于mysql - 将电子邮件退订存储到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27265592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com